Skip to content

Commit

Permalink
Merge pull request #824 from uktrade/LTD-1237-introduce-is-ogd-flag
Browse files Browse the repository at this point in the history
Introduce is_ogd flag
  • Loading branch information
wkeeling authored Sep 27, 2021
2 parents dd0d921 + 06a3854 commit b1d2fde
Show file tree
Hide file tree
Showing 7 changed files with 79 additions and 35 deletions.
2 changes: 1 addition & 1 deletion api/data_workspace/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ def test_queues(self):

def test_teams(self):
url = reverse("data_workspace:dw-teams-list")
expected_fields = ("id", "name", "part_of_ecju")
expected_fields = ("id", "name", "part_of_ecju", "is_ogd")
response = self.client.get(url)
self.assertEqual(response.status_code, status.HTTP_200_OK)
results = response.json()["results"]
Expand Down
34 changes: 11 additions & 23 deletions api/flags/tests/test_create_flags.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,13 @@ def test_gov_user_can_create_flags(self):
self.assertEqual(response_data["label"], "This is label")
self.assertEqual(
response_data["team"],
{"id": str(self.team.id), "name": self.team.name, "part_of_ecju": None, "department": None},
{
"id": str(self.team.id),
"name": self.team.name,
"part_of_ecju": None,
"department": None,
"is_ogd": False,
},
)

@parameterized.expand(
Expand All @@ -50,11 +56,7 @@ def test_create_flag_failure(self, name):
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

def test_cannot_set_priority_to_less_than_0(self):
data = {
"name": "new flag",
"level": "Organisation",
"priority": -1,
}
data = {"name": "new flag", "level": "Organisation", "priority": -1}

response = self.client.post(self.url, data, **self.gov_headers)
response_data = response.json()
Expand All @@ -63,11 +65,7 @@ def test_cannot_set_priority_to_less_than_0(self):
self.assertIn(strings.Flags.ValidationErrors.PRIORITY_NEGATIVE, response_data["errors"]["priority"])

def test_cannot_set_priority_to_greater_than_100(self):
data = {
"name": "new flag",
"level": "Organisation",
"priority": 101,
}
data = {"name": "new flag", "level": "Organisation", "priority": 101}

response = self.client.post(self.url, data, **self.gov_headers)
response_data = response.json()
Expand All @@ -76,25 +74,15 @@ def test_cannot_set_priority_to_greater_than_100(self):
self.assertIn(strings.Flags.ValidationErrors.PRIORITY_TOO_LARGE, response_data["errors"]["priority"])

def test_cannot_create_flag_with_colour_and_no_label(self):
data = {
"name": "new flag",
"level": "Organisation",
"colour": FlagColours.ORANGE,
"label": "",
}
data = {"name": "new flag", "level": "Organisation", "colour": FlagColours.ORANGE, "label": ""}

response = self.client.post(self.url, data, **self.gov_headers)

self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn(strings.Flags.ValidationErrors.LABEL_MISSING, response.json()["errors"]["label"])

def test_cannot_create_flag_without_blocks_finalising(self):
data = {
"name": "new flag",
"level": "Organisation",
"colour": FlagColours.ORANGE,
"label": "This is label",
}
data = {"name": "new flag", "level": "Organisation", "colour": FlagColours.ORANGE, "label": "This is label"}

response = self.client.post(self.url, data, **self.gov_headers)

Expand Down
23 changes: 23 additions & 0 deletions api/teams/migrations/0003_auto_20210927_1429.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Generated by Django 3.1.12 on 2021-09-27 13:29

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [("teams", "0002_auto_20210924_1241")]

operations = [
migrations.AddField(
model_name="team",
name="is_ogd",
field=models.BooleanField(default=False, help_text="Whether the team is an Other Government Department"),
),
migrations.AlterField(
model_name="team",
name="part_of_ecju",
field=models.BooleanField(
default=None, help_text="Whether the team is part of Export Control Joint Unit", null=True
),
),
]
6 changes: 5 additions & 1 deletion api/teams/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,14 @@ def get_by_natural_key(self, name):
class Team(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.TextField(default=None, unique=True)
part_of_ecju = models.BooleanField(default=None, null=True)
department = models.ForeignKey(
Department, null=True, blank=True, default=None, on_delete=models.SET_NULL, related_name="teams"
)
part_of_ecju = models.BooleanField(
default=None, null=True, help_text="Whether the team is part of Export Control Joint Unit"
)
# Note that certain teams can be OGDs *and* be part of ECJU, for example: FCDO
is_ogd = models.BooleanField(default=False, help_text="Whether the team is an Other Government Department")

objects = TeamManager()

Expand Down
9 changes: 8 additions & 1 deletion api/teams/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,14 @@ class TeamReadOnlySerializer(serializers.Serializer):
id = serializers.UUIDField(read_only=True)
name = serializers.CharField(read_only=True)
part_of_ecju = serializers.BooleanField(read_only=True)
is_ogd = serializers.BooleanField(read_only=True)


class TeamSerializer(serializers.ModelSerializer):
name = serializers.CharField(
max_length=50,
validators=[
UniqueValidator(queryset=Team.objects.all(), lookup="iexact", message=strings.Teams.NOT_UNIQUE_NAME,)
UniqueValidator(queryset=Team.objects.all(), lookup="iexact", message=strings.Teams.NOT_UNIQUE_NAME)
],
error_messages={"blank": strings.Teams.BLANK_NAME},
)
Expand All @@ -29,6 +30,9 @@ class TeamSerializer(serializers.ModelSerializer):
"required": "Select yes if the team is part of ECJU",
}
)
is_ogd = serializers.BooleanField(
error_messages={"null": "Select yes if the team is an OGD", "required": "Select yes if the team is an OGD"}
)

class Meta:
model = Team
Expand All @@ -40,4 +44,7 @@ def validate(self, attrs):
if "part_of_ecju" not in validated_data:
raise serializers.ValidationError({"part_of_ecju": "Select yes if the team is part of ECJU"})

if "is_ogd" not in validated_data:
raise serializers.ValidationError({"is_ogd": "Select yes if the team is an OGD"})

return validated_data
16 changes: 12 additions & 4 deletions api/teams/tests/test_create.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,24 +14,32 @@ def setUp(self):
super().setUp()
self.team_preexisting_count = Team.objects.all().count()

def test_create_team_failure(self):
data = {"name": "new team"}
def test_create_team_missing_part_of_ecju(self):
data = {"name": "new team", "is_ogd": False}
response = self.client.post(self.url, data, **self.gov_headers)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
response = response.json()["errors"]
self.assertEqual(response["part_of_ecju"][0], "Select yes if the team is part of ECJU")

def test_create_team_missing_is_ogd(self):
data = {"name": "new team", "part_of_ecju": False}
response = self.client.post(self.url, data, **self.gov_headers)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
response = response.json()["errors"]
self.assertEqual(response["is_ogd"][0], "Select yes if the team is an OGD")

def test_create_team(self):
data = {"name": "new team", "part_of_ecju": True}
data = {"name": "new team", "part_of_ecju": True, "is_ogd": True}
response = self.client.post(self.url, data, **self.gov_headers)

self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertEqual(Team.objects.filter(name="new team").count(), 1)
self.assertEqual(Team.objects.get(name="new team").name, "new team")
self.assertEqual(Team.objects.get(name="new team").part_of_ecju, True)
self.assertEqual(Team.objects.get(name="new team").is_ogd, True)

@parameterized.expand(
[[{"name": "this is a name"}], [{"name": "ThIs iS A NaMe"}], [{"name": " this is a name "}],]
[[{"name": "this is a name"}], [{"name": "ThIs iS A NaMe"}], [{"name": " this is a name "}]]
)
def test_team_name_must_be_unique(self, data):
Team(name="this is a name", part_of_ecju=True).save()
Expand Down
24 changes: 19 additions & 5 deletions api/teams/tests/test_edit.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ def test_edit_team_name_successful(self):
team = Team(name="Team", part_of_ecju=True)
team.save()

data = {"name": "Renamed Team", "part_of_ecju": False}
data = {"name": "Renamed Team", "part_of_ecju": False, "is_ogd": False}

url = reverse("teams:team", kwargs={"pk": team.id})
response = self.client.put(url, data, **self.gov_headers)
Expand All @@ -24,12 +24,13 @@ def test_edit_team_name_successful(self):
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(team.name, data["name"])
self.assertEqual(team.part_of_ecju, data["part_of_ecju"])
self.assertEqual(team.part_of_ecju, data["is_ogd"])

def test_edit_team_failure(self):
def test_edit_team_missing_part_of_ecju(self):
team = Team(name="Team")
team.save()

data = {"name": "Renamed Team"}
data = {"name": "Renamed Team", "is_ogd": False}

url = reverse("teams:team", kwargs={"pk": team.id})
response = self.client.put(url, data, **self.gov_headers)
Expand All @@ -38,12 +39,25 @@ def test_edit_team_failure(self):
response = response.json()["errors"]
self.assertEqual(response["part_of_ecju"][0], "Select yes if the team is part of ECJU")

def test_edit_team_missing_is_ogd(self):
team = Team(name="Team")
team.save()

data = {"name": "Renamed Team", "part_of_ecju": False}

url = reverse("teams:team", kwargs={"pk": team.id})
response = self.client.put(url, data, **self.gov_headers)
team.refresh_from_db()
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
response = response.json()["errors"]
self.assertEqual(response["is_ogd"][0], "Select yes if the team is an OGD")

def test_cannot_rename_to_an_already_used_name_case_insensitive(self):
"""
Test that a valid gov user cannot edit their team name
to the same as another teams
"""
team = Team(name="name", part_of_ecju=False)
team = Team(name="name", part_of_ecju=False, is_ogd=False)
team.save()

Team(name="test").save()
Expand All @@ -59,7 +73,7 @@ def test_cannot_rename_to_an_already_used_name_case_insensitive(self):
def test_cannot_edit_admin_team(self):
team = get_team_by_pk(pk=Teams.ADMIN_TEAM_ID)

data = {"name": "Renamed Team", "part_of_ecju": True}
data = {"name": "Renamed Team", "part_of_ecju": True, "is_ogd": False}

url = reverse("teams:team", kwargs={"pk": team.id})
response = self.client.put(url, data, **self.gov_headers)
Expand Down

0 comments on commit b1d2fde

Please sign in to comment.