def test_administrator_can_access_director_from_other_company():
    my_company = factories.CompanyFactory()
    # set role to administrator
    me = factories.EmployeeFactory(company=my_company)
    flask.g.user = me
    other_company = factories.CompanyFactory()
    # set role to director
    other = factories.EmployeeFactory(company=other_company)
    assert is_allowed(method=Method.READ,
                      resource="employee",
                      employee_id=other.id)
def test_cannot_access_other_company_employees(method, app, db_session):
    """
    Even though the authenticated user is a director, they cannot access a
    manager's profile because the manager works for another company.
    """
    director = factories.EmployeeFactory(
        company=factories.CompanyFactory(),
        role=factories.RoleFactory(name="Director"))
    manager = factories.EmployeeFactory(
        company=factories.CompanyFactory(),
        role=factories.RoleFactory(name="Manager"))
    flask.g.user = director
    assert not has_privilege(
        method=Method.READ, resource="employee", employee_id=manager.id)
def test_cannot_access_list(client, db_session):
    """ Show 403 - Forbidden when user cannot access employee list """
    company = factories.CompanyFactory()
    manager_role = factories.RoleFactory()
    employee = factories.EmployeeFactory(company=company, role=manager_role)
    response = client.get(url_for("employee.list"))
    assert response.status_code == HTTPStatus.FORBIDDEN
示例#4
0
def test_insert_employee(db_session):
    """Integration test for adding and selecting Employee"""
    company = factories.CompanyFactory()
    manager_role = factories.RoleFactory()
    employee = factories.EmployeeFactory(company=company, role=manager_role)
    row = db_session.query(Employee).get(employee.id)
    assert row.username == employee.username
示例#5
0
def test_can_manage_employees_from_same_company(method, clean_app):
    me = factories.EmployeeFactory(company=factories.CompanyFactory())
    colleague = factories.EmployeeFactory(company=me.company)
    flask.g.user = me
    assert has_privilege(method=method,
                         resource="employee",
                         employee_id=colleague.id)
示例#6
0
 def login(self, username="******", password="******"):
     employee = factories.EmployeeFactory(
         company=factories.CompanyFactory(), )
     with self._client.session_transaction() as session:
         session["user_id"] = employee.id
         session["logged_in"] = True
     return True
def test_can_access_same_company_employees(app, db_session):
    company = factories.CompanyFactory()
    manager_role = factories.RoleFactory()
    me = factories.EmployeeFactory(company=company, role=manager_role)
    colleague = factories.EmployeeFactory(company=company, role=manager_role)
    flask.g.user = me
    assert has_privilege(
        method=Method.READ, resource="employee", employee_id=colleague.id)
示例#8
0
def test_list(client, db_session):
    """ List all employees """
    company = factories.CompanyFactory()
    manager_role = factories.RoleFactory()
    employee = factories.EmployeeFactory(company=company, role=manager_role)
    response = client.get(url_for("employee.list"))
    assert response.status_code == HTTPStatus.OK
    assert str.encode(employee.username) in response.data
def test_manager_can_access_employee():
    my_company = factories.CompanyFactory()
    me = factories.EmployeeFactory(company=my_company)  # set role to manager
    flask.g.user = me
    other = factories.EmployeeFactory(company=my_company)  # set role to master
    assert is_allowed(method=Method.READ,
                      resource="employee",
                      employee_id=other.id)
示例#10
0
def test_owner_can_access_director():
    my_company = factories.CompanyFactory()
    me = factories.EmployeeFactory(company=my_company)  # set role to owner
    flask.g.user = me
    # set role to director
    other = factories.EmployeeFactory(company=my_company)
    assert is_allowed(method=Method.READ,
                      resource="employee",
                      employee_id=other.id)
示例#11
0
def test_list(client):
    """ Test list is okay """
    company = factories.CompanyFactory()
    employee = factories.EmployeeFactory(company=company)
    factories.ItemFactory(employee_id=employee.id, company=company)
    response = client.get("/items/")
    assert "<article class=\"item\"><header><div><h1>1</h1></div>" in response.data
    assert "<article class=\"item\"><header><div><h1>2</h1></div>" in response.data
    assert "<article class=\"item\"><header><div><h1>3</h1></div>" in response.data
    assert "<article class=\"item\"><header><div><h1>4</h1></div>" in response.data
    assert response.status_code == HTTPStatus.OK
示例#12
0
def test_company_endpoints(client):
    employee = factories.EmployeeFactory(
        company=factories.CompanyFactory()
    )

    with client.session_transaction() as session:
        session["user_id"] = employee.id

    url = flask.url_for('companies.api', company_id=employee.company_id)
    assert client.get(url).status_code == 200
    assert client.put(url).status_code == 200
    assert client.delete(url).status_code == 204
示例#13
0
def test_activate_authenticated(client):
    """
    Tests if authenticated POST to activate returns correct screen
    """
    employee = factories.EmployeeFactory(company=factories.CompanyFactory(),
                                         account_status=False)
    with client.session_transaction() as session:
        session["logged_in"] = True
        session["user_id"] = employee.id
    response = client.post("/auth/activate")
    assert b"<h1>Successfully activated your account.</h1>" in response.data
    assert Employee.query.get(employee.id).account_status
    assert response.status_code == HTTPStatus.OK
def test_delete(client):
    company = factories.CompanyFactory()
    intern = factories.EmployeeFactory(
        company=company, role_id=Role(role_type=RoleType.Intern.name).id)
    boss = factories.EmployeeFactory(
        company=company, role_id=Role(role_type=RoleType.Manager.name).id)
    with client.session_transaction() as session:
        session["user_id"] = boss.id
    intern_id = intern.id
    response = client.post(url_for("employee.delete", id=intern_id))
    assert Employee.query.count() == 1
    assert Employee.query.get(intern_id) is None
    assert response.status_code == HTTPStatus.OK
示例#15
0
def test_activate_authenticated(client):
    """
    Tests if authenticated POST to activate returns correct screen
    @todo #385:30min Inject user into session in the test below. Test is broken
     because we do not set user in session and then auth/views.py does not
     redirect to correct page. Fix this behavior and uncomment this test.
    """
    employee = factories.EmployeeFactory(company=factories.CompanyFactory(),
                                         account_status=False)
    with client.session_transaction() as session:
        session["user_id"] = employee.id
    g.user = employee
    response = client.post("/auth/activate")
    assert b"<h1>Successfully activated your account.</h1>" in response.data
    assert employee.account_status
    assert response.status_code == HTTPStatus.OK
示例#16
0
def test_list(client):
    """ Test list is okay """
    role = factories.RoleFactory(name=RoleType.Intern.name)
    company = factories.CompanyFactory()
    employee = factories.EmployeeFactory(company=company, role_id=role.id)
    location = factories.LocationFactory(company=company)
    floor = factories.FloorFactory(location=location)
    with client.session_transaction() as session:
        session["user_id"] = employee.id
    g.user = employee
    factories.TableFactory(floor_id=floor.id, name="Table 01")
    factories.TableFactory(floor_id=floor.id, name="Table 02")
    factories.TableFactory(floor_id=floor.id, name="Table 03")
    response = client.get(url_for("/tables/"))
    assert response.status_code == HTTPStatus.OK
    assert b"<div><h1>Table 01</h1></div>" in response.data
    assert b"<div><h1>Table 02</h1></div>" in response.data
    assert b"<div><h1>Table 03</h1></div>" in response.data
    assert b"<div><h1>Table " in response.data.count == 3
def test_can_access_subalterns(method, app, db_session):
    """
    A director of a company should be able to access
    the profiles of employees with a lower role.
    """
    company = factories.CompanyFactory()

    director = factories.EmployeeFactory(
        company=company, role=factories.RoleFactory(name="Director"))
    master = factories.EmployeeFactory(
        company=company, role=factories.RoleFactory(name="Master"))
    manager = factories.EmployeeFactory(
        company=company, role=factories.RoleFactory(name="Manager"))
    intern = factories.EmployeeFactory(
        company=company, role=factories.RoleFactory(name="Intern"))
    flask.g.user = director
    assert has_privilege(resource="employee", employee_id=manager.id)
    assert has_privilege(resource="employee", employee_id=master.id)
    assert has_privilege(resource="employee", employee_id=intern.id)
示例#18
0
def test_create(client):
    """ Test create is okay """
    company = factories.CompanyFactory()
    employee = factories.EmployeeFactory(company=company)
    item_name = "Yellow Fedora"
    item_comment = "A yellow fedora that belonged to a hero from a movie"
    item = {
        "name": item_name,
        "comment": item_comment,
        "company_id": company.id,
        "employee_id": employee.id,
    }
    create_response = client.post("/items/create", data=item)
    database_item = Item.query.filter_by(name="Yellow Fedora").first()
    assert create_response.status_code == HTTPStatus.OK
    assert database_item is not None
    assert database_item.name == item_name
    assert database_item.comment == item_comment
    assert database_item.company_id == company.id
    assert database_item.employee_id == employee.id
示例#19
0
def test_can_not_manage_employees_from_different_company(method, clean_app):
    me = factories.EmployeeFactory(company=factories.CompanyFactory())
    someone = factories.EmployeeFactory(company=factories.CompanyFactory())
    flask.g.user = me
    assert not has_privilege(
        method=method, resource="employee", employee_id=someone.id)