def test_ogd_other_dept_error(self, logged_in_client):
        # Arrange
        dept_name = "other_dep"
        dept = GovDepartmentFactory(name=dept_name)
        u = UserFactory(gov_department=dept)

        # Act
        resp = logged_in_client.get(
            reverse(
                "action-progress-department",
                kwargs={"dept": dept_name},
            ))

        # Assert
        assert resp.status_code == 403
    def test_ogd_other_dept(self, logged_in_client):
        # Arrange
        dept_name = "other_dep"
        dept = GovDepartmentFactory(name=dept_name)
        u = UserFactory(gov_department=dept)

        # Act
        resp = logged_in_client.get(
            reverse(
                "chain-details-list",
                kwargs={"dept": dept_name},
            ))

        # Assert
        assert resp.status_code == 200
def test_new_user_calls_user_manager_create_user_method():
    """
    Test that when create_user is called, object creation is achieved
    by calling the create_user method of models.UserManager.
    """
    gov_department = GovDepartmentFactory(email_domains=["email.gov.uk"])
    mock_profile = {
        "email": "*****@*****.**",  # /PS-IGNORE
        "email_user_id": "*****@*****.**",  # /PS-IGNORE
        "first_name": "Mr",
        "last_name": "Test",
    }
    auth_backend = CustomAuthbrokerBackend()
    with mock.patch(
            "accounts.models.UserManager.create_user") as mocked_method:
        new_profile = auth_backend.create_user(mock_profile)
        assert mocked_method.called
def test_manager_create_user_does_not_create_superuser():
    """
    Test that a normal user isn't created as a superuser.
    """
    new_dep = GovDepartmentFactory(
        email_domains=[
            "email.gov.uk",
        ]
    )
    mock_profile = {
        "sso_email_user_id": "*****@*****.**",  # /PS-IGNORE
        "first_name": "Mr",
        "last_name": "Test",
        "gov_department": new_dep,
    }
    email = "*****@*****.**"  # /PS-IGNORE
    new_profile = UserModel.objects.create_user(email=email, **mock_profile)
    assert not new_profile.is_superuser
    def test_auth_on_dept(self, logged_in_client):
        # Arrange
        dept_name = "other_dep"
        dept = GovDepartmentFactory(name=dept_name)
        sc = SupplyChainFactory.create(gov_department=dept)

        # Act
        resp = logged_in_client.get(
            reverse(
                "chain-details-info",
                kwargs={
                    "dept": dept_name,
                    "supply_chain_slug": sc.slug
                },
            ))

        # Assert
        assert resp.status_code == 200
def test_backend_create_user_creates_user_with_valid_data():
    """
    Test that the newly-created user has all the bits we intended them to have.
    """
    gov_department = GovDepartmentFactory(email_domains=["email.gov.uk"])
    mock_profile = {
        "email": "*****@*****.**",  # /PS-IGNORE
        "email_user_id": "*****@*****.**",  # /PS-IGNORE
        "first_name": "Mr",
        "last_name": "Test",
    }
    auth_backend = CustomAuthbrokerBackend()
    new_profile = auth_backend.create_user(mock_profile)
    assert new_profile is not None
    assert new_profile.email == mock_profile["email"]
    assert new_profile.sso_email_user_id == mock_profile["email_user_id"]
    assert new_profile.first_name == mock_profile["first_name"]
    assert new_profile.last_name == mock_profile["last_name"]
def test_manager_create_user_calls_set_unusable_password():
    """
    Test that UserModel.objects.create_user correctly prevents password login.
    """
    new_dep = GovDepartmentFactory(
        email_domains=[
            "email.gov.uk",
        ]
    )
    mock_profile = {
        "sso_email_user_id": "*****@*****.**",  # /PS-IGNORE
        "first_name": "Mr",
        "last_name": "Test",
        "gov_department": new_dep,
    }
    email = "*****@*****.**"  # /PS-IGNORE
    with mock.patch.object(UserModel, "set_unusable_password") as mocked_method:
        new_profile = UserModel.objects.create_user(email=email, **mock_profile)
        assert mocked_method.called
    def test_auth_no_perm(self, logged_in_client):
        # Arrange
        dept_name = "mod"
        dept = GovDepartmentFactory(name=dept_name)
        sc_name = "ceramics"
        SupplyChainFactory(gov_department=dept, name=sc_name)

        # Act
        resp = logged_in_client.get(
            reverse(
                "action-progress-list",
                kwargs={
                    "dept": dept_name,
                    "supply_chain_slug": sc_name
                },
            ))

        # Assert
        assert resp.status_code == 403
    def test_ogd_other_dept_error(self, logged_in_client):
        # Arrange
        dept_name = "other_dep"
        dept = GovDepartmentFactory(name=dept_name)
        sc_name = "ceramics"
        sc = SupplyChainFactory(gov_department=dept, name=sc_name)
        sa = StrategicActionFactory(supply_chain=sc)

        # Act
        resp = logged_in_client.get(
            reverse(
                "action-progress-detail",
                kwargs={
                    "dept": dept_name,
                    "supply_chain_slug": sc_name,
                    "action_slug": sa.slug,
                },
            ))

        # Assert
        assert resp.status_code == 403
def test_manager_create_user_creates_user():
    """
    Test that UserModel.objects.create_user does that.
    """
    new_dep = GovDepartmentFactory(
        email_domains=[
            "email.gov.uk",
        ]
    )
    mock_profile = {
        "sso_email_user_id": "*****@*****.**",  # /PS-IGNORE
        "first_name": "Mr",
        "last_name": "Test",
        "gov_department": new_dep,
    }
    email = "*****@*****.**"  # /PS-IGNORE
    new_profile = UserModel.objects.create_user(email=email, **mock_profile)
    assert new_profile is not None
    assert new_profile.email == email
    assert new_profile.sso_email_user_id == mock_profile["sso_email_user_id"]
    assert new_profile.first_name == mock_profile["first_name"]
    assert new_profile.last_name == mock_profile["last_name"]
def test_check_matching_gov_department_success():
    """Test True is returned if supply chain and user have same gov department."""
    g = GovDepartmentFactory()
    user = UserFactory(gov_department=g)
    supply_chain = SupplyChainFactory(gov_department=g)
    assert check_matching_gov_department(user, supply_chain)