Skip to content

Commit

Permalink
Merge pull request #232 from monzo/store-deleted
Browse files Browse the repository at this point in the history
Store whether the user has been deleted
  • Loading branch information
Chris authored Oct 7, 2020
2 parents e47a1b7 + c098649 commit 4a59c92
Show file tree
Hide file tree
Showing 7 changed files with 51 additions and 3 deletions.
1 change: 1 addition & 0 deletions response/core/models/user_external.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ class Meta:
display_name = models.CharField(max_length=50, blank=False, null=False)
full_name = models.CharField(max_length=50, blank=True, null=True)
email = models.CharField(max_length=100, blank=True, null=True)
deleted = models.BooleanField(default=False)

objects = ExternalUserManager()

Expand Down
9 changes: 8 additions & 1 deletion response/core/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,14 @@
class ExternalUserSerializer(serializers.ModelSerializer):
class Meta:
model = ExternalUser
fields = ("app_id", "external_id", "display_name", "full_name", "email")
fields = (
"app_id",
"external_id",
"display_name",
"full_name",
"email",
"deleted",
)


class TimelineEventSerializer(serializers.ModelSerializer):
Expand Down
16 changes: 16 additions & 0 deletions response/migrations/0017_externaluser_deleted.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Generated by Django 2.2.16 on 2020-10-07 13:57

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [("response", "0016_actions_auto_created_date")]

operations = [
migrations.AddField(
model_name="externaluser",
name="deleted",
field=models.BooleanField(default=False),
)
]
5 changes: 5 additions & 0 deletions response/slack/cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ def update_user_cache(exclude_bots=False):
or user["name"],
"full_name": user["profile"]["real_name"] or user["name"],
"email": user["profile"].get("email", None),
"deleted": user["deleted"],
},
)
cursor = response["response_metadata"].get("next_cursor")
Expand All @@ -51,6 +52,7 @@ def get_user_profile(external_id):
"name": external_user.display_name,
"fullname": external_user.full_name,
"email": external_user.email,
"deleted": external_user.deleted,
}
except ExternalUser.DoesNotExist:
# profile from slack
Expand All @@ -67,6 +69,7 @@ def get_user_profile(external_id):
"display_name": user_profile["name"],
"full_name": user_profile["fullname"],
"email": user_profile["email"],
"deleted": user_profile["deleted"],
},
)

Expand All @@ -92,6 +95,7 @@ def get_user_profile_by_email(email):
"name": external_user.display_name,
"fullname": external_user.full_name,
"email": external_user.email,
"deleted": external_user.deleted,
}
except ExternalUser.DoesNotExist:
# profile from slack
Expand All @@ -110,6 +114,7 @@ def get_user_profile_by_email(email):
"display_name": user_profile["name"],
"full_name": user_profile["fullname"],
"email": user_profile["email"],
"deleted": user_profile["deleted"],
},
)

Expand Down
2 changes: 2 additions & 0 deletions response/slack/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,7 @@ def get_user_profile(self, user_id):
"name": response["user"]["name"],
"fullname": response["user"]["profile"]["real_name"],
"email": response["user"]["profile"].get("email", None),
"deleted": response["user"]["deleted"],
}

def get_user_profile_by_email(self, email):
Expand All @@ -261,6 +262,7 @@ def get_user_profile_by_email(self, email):
"name": response["user"]["name"],
"fullname": response["user"]["profile"]["real_name"],
"email": email,
"deleted": response["user"]["deleted"],
}

def rename_channel(self, channel_id, new_name):
Expand Down
2 changes: 1 addition & 1 deletion tests/slack/slack_payloads.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"id": "W012A3CDE",
"team_id": "T012AB3C4",
"name": "spengler",
"deleted": False,
"deleted": True,
"color": "9f69e7",
"real_name": "spengler",
"tz": "America/Los_Angeles",
Expand Down
19 changes: 18 additions & 1 deletion tests/slack/test_cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,16 @@ def test_update_cache_from_empty(mock_slack):
update_user_cache()

assert len(ExternalUser.objects.all()) == 2
cache_user1 = ExternalUser.objects.get(external_id="W012A3CDE")
assert cache_user1.display_name == "spengler"
assert cache_user1.full_name == "Egon Spengler"
assert cache_user1.email == "[email protected]"
assert cache_user1.deleted
cache_user2 = ExternalUser.objects.get(external_id="U12345678")
assert cache_user2.display_name == "Glinda the Fairly Good"
assert cache_user2.full_name == "Glinda Southgood"
assert cache_user2.email == "[email protected]"
assert not cache_user2.deleted


@pytest.mark.django_db
Expand Down Expand Up @@ -77,6 +87,7 @@ def test_get_user_profile_not_in_cache(mock_slack):
"name": "spengler",
"fullname": "Egon Spengler",
"email": "[email protected]",
"deleted": True,
}

# check cache is empty at start
Expand All @@ -97,17 +108,18 @@ def test_get_user_profile_not_in_cache(mock_slack):
assert cache_user.display_name == "spengler"
assert cache_user.full_name == "Egon Spengler"
assert cache_user.email == "[email protected]"
assert cache_user.deleted


@pytest.mark.django_db
def test_get_user_profile_in_cache(mock_slack):

# create cache entry for user
slack_user = ExternalUser(
external_id="U12345678",
display_name="spengler",
full_name="Egon Spengler",
email="[email protected]",
deleted=True,
)
slack_user.save()
assert len(ExternalUser.objects.all()) == 1
Expand All @@ -121,6 +133,7 @@ def test_get_user_profile_in_cache(mock_slack):
assert user["name"] == "spengler"
assert user["fullname"] == "Egon Spengler"
assert user["email"] == "[email protected]"
assert user["deleted"]

# check cache is unchanged
assert len(ExternalUser.objects.all()) == 1
Expand All @@ -133,6 +146,7 @@ def test_get_user_profile_by_email_not_in_cache(mock_slack):
"name": "spengler",
"fullname": "Egon Spengler",
"email": "[email protected]",
"deleted": True,
}

# check cache is empty at start
Expand All @@ -153,6 +167,7 @@ def test_get_user_profile_by_email_not_in_cache(mock_slack):
assert cache_user.display_name == "spengler"
assert cache_user.full_name == "Egon Spengler"
assert cache_user.email == "[email protected]"
assert cache_user.deleted


@pytest.mark.django_db
Expand All @@ -163,6 +178,7 @@ def test_get_user_profile_by_email_in_cache(mock_slack):
display_name="spengler",
full_name="Egon Spengler",
email="[email protected]",
deleted=True,
)
slack_user.save()
assert len(ExternalUser.objects.all()) == 1
Expand All @@ -176,6 +192,7 @@ def test_get_user_profile_by_email_in_cache(mock_slack):
assert user["name"] == "spengler"
assert user["fullname"] == "Egon Spengler"
assert user["email"] == "[email protected]"
assert user["deleted"]

# check cache is unchanged
assert len(ExternalUser.objects.all()) == 1

0 comments on commit 4a59c92

Please sign in to comment.