Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added button_2/__init__.py
Empty file.
50 changes: 50 additions & 0 deletions button_2/blackboard.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import marimo

__generated_with = "0.16.2"
app = marimo.App(width="medium")


@app.cell
def _():
import marimo as mo
return (mo,)


@app.cell
def _(mo):
mo.md(r"""## employee text generator""")
return


@app.cell
def _():
from classes.entities.employee import Employee
return (Employee,)


@app.cell
def _(Employee):
employee = Employee()
return (employee,)


@app.cell
def _(employee):
employee.employee_id
return


@app.cell
def _(employee):
employee.job_title
return


@app.cell
def _(employee):
employee.department
return


if __name__ == "__main__":
app.run()
Empty file added button_2/classes/__init__.py
Empty file.
8 changes: 8 additions & 0 deletions button_2/classes/entities/employee.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
class Employee:
def __init__(self):
self.employee_id = "#eiLaSi-LV-426-ekaCehT"
self.job_title = None
self.department = None

def reorg(self):
pass
Empty file.
Empty file added button_2/tests/__init__.py
Empty file.
Empty file.
72 changes: 72 additions & 0 deletions button_2/tests/entities/test_employee.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
from button_2.classes.entities.employee import Employee
import pandas as pd
from button_2.classes.button_dat import ButtonDat

def test_employee_init():
employee = Employee()
assert employee is not None
assert hasattr(employee, 'employee_id')
assert hasattr(employee, 'job_title')
assert hasattr(employee, 'department')

def test_employee_methods():
employee = Employee()
assert callable(employee.reorg), (
"Employee should have a callable reorg method"
)

def test_texgen_employee_attributes():
employee = Employee()
assert employee.employee_id is not None
assert employee.job_title is not None
assert employee.department is not None

def helper_test_reorg_method():
# this helper is a single trial that:
# instantiates employee
# stores initial state
# calls reorg
# checks if state changed
# low probability of change expected,
# so will run multiple times in main test

employee = Employee()
initial_state = (employee.job_title, employee.department)
employee.reorg()
new_state = (employee.job_title, employee.department)
return {"state_change": initial_state != new_state,
"job_title": employee.job_title,
"department": employee.department}

def test_employee_reorg_method_changes_state():
# run the helper multiple times to statistically verify change

trials = 1000

# we don't want the reorg to happen too often, say 0.1 true probability
probability_threshold = 0.20

simulation = [helper_test_reorg_method() for _ in range(trials)]

sim_df = pd.DataFrame(simulation)

changes = sum(sim_df['state_change'])

button_dat = ButtonDat()

assert changes > 0, (
"reorg method should change employee state occasionally"
)
assert changes / trials < probability_threshold, (
"reorg method should not change employee state too frequently"
)
# check generated job titles are expected values from employee df
assert set(sim_df["job_title"].unique()).issubset(
set(button_dat.employee["job_title"].unique())
), "Unexpected job titles generated"

# check generated departments are expected values from employee df
assert set(sim_df["department"].unique()).issubset(
set(button_dat.employee["department"].unique())
), "Unexpected departments generated"

Empty file.
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"dotenv>=0.9.9",
"marimo>=0.16.2",
"matplotlib>=3.10.6",
"networkx>=3.5",
"pandas>=2.3.2",
Expand Down
362 changes: 362 additions & 0 deletions uv.lock

Large diffs are not rendered by default.