views/realm_aliases.py: Use domain instead of id as handle for RealmAlias.

We need to make the change for the API, and the next commit introduces a
unique_together constraint on (realm, domain) anyway.
This commit is contained in:
Harshit Bansal
2017-01-21 00:09:27 -08:00
committed by Tim Abbott
parent 06cc306d00
commit b4186fdfdd
10 changed files with 29 additions and 37 deletions

View File

@@ -95,7 +95,6 @@ function render(template_name, args) {
var html = "<table>";
var args = {
alias: {
id: 1,
domain: 'zulip.org',
},
};
@@ -104,16 +103,11 @@ function render(template_name, args) {
var button = $(html).find('.btn');
var domain = $(html).find('.domain');
var row = button.closest('tr');
assert.equal(button.text().trim(), "Remove");
assert(button.hasClass("delete_alias"));
assert.equal(button.data("id"), "1");
assert.equal(domain.text(), "zulip.org");
assert.equal(row.attr("id"), "alias_1");
global.write_handlebars_output("admin-alias-list", html);
}());

View File

@@ -902,7 +902,8 @@ function _setup_page() {
});
$("#alias_table").on("click", ".delete_alias", function () {
var url = "/json/realm/domains/" + $(this).data('id');
var domain = $(this).parents("tr").find(".domain").text();
var url = "/json/realm/domains/" + domain;
var aliases_info = $("#realm_aliases_modal").find(".aliases_info");
channel.del({

View File

@@ -113,7 +113,7 @@ function dispatch_normal_event(event) {
} else if (event.op === 'remove') {
var i;
for (i = 0; i < page_params.domains.length; i += 1) {
if (page_params.domains[i].id === event.alias_id) {
if (page_params.domains[i].domain === event.domain) {
page_params.domains.splice(i, 1);
break;
}

View File

@@ -1,6 +1,6 @@
{{#with alias}}
<tr id="alias_{{id}}">
<tr>
<td class="domain">{{domain}}</td>
<td><button class="btn btn-danger btn-sm delete_alias" data-id="{{id}}">{{t "Remove" }}</button></td>
<td><button class="btn btn-danger btn-sm delete_alias">{{t "Remove" }}</button></td>
</tr>
{{/with}}

View File

@@ -3321,7 +3321,7 @@ def apply_events(state, events, user_profile):
if event['op'] == 'add':
state['realm_domains'].append(event['alias'])
elif event['op'] == 'remove':
state['realm_domains'] = [alias for alias in state['realm_domains'] if alias['id'] != event['alias_id']]
state['realm_domains'] = [alias for alias in state['realm_domains'] if alias['domain'] != event['domain']]
elif event['type'] == "realm_emoji":
state['realm_emoji'] = event['realm_emoji']
elif event['type'] == "alert_words":
@@ -3685,24 +3685,21 @@ def get_emails_from_user_ids(user_ids):
def get_realm_aliases(realm):
# type: (Realm) -> List[Dict[str, Text]]
return list(realm.realmalias_set.values('id', 'domain'))
return list(realm.realmalias_set.values('domain'))
def do_add_realm_alias(realm, domain):
# type: (Realm, Text) -> (RealmAlias)
alias = RealmAlias(realm=realm, domain=domain)
alias.full_clean()
alias.save()
alias = RealmAlias.objects.create(realm=realm, domain=domain)
event = dict(type="realm_domains", op="add",
alias=dict(id=alias.id,
domain=alias.domain,
alias=dict(domain=alias.domain,
))
send_event(event, active_user_ids(realm))
return alias
def do_remove_realm_alias(realm, alias_id):
# type: (Realm, int) -> None
RealmAlias.objects.get(pk=alias_id).delete()
event = dict(type="realm_domains", op="remove", alias_id=alias_id)
def do_remove_realm_alias(realm, domain):
# type: (Realm, Text) -> None
RealmAlias.objects.get(realm=realm, domain=domain).delete()
event = dict(type="realm_domains", op="remove", domain=domain)
send_event(event, active_user_ids(realm))
def get_occupied_streams(realm):

View File

@@ -334,7 +334,7 @@ def email_allowed_for_realm(email, realm):
def list_of_domains_for_realm(realm):
# type: (Realm) -> List[Text]
return list(RealmAlias.objects.filter(realm = realm).values('domain', 'id'))
return list(RealmAlias.objects.filter(realm=realm).values('domain'))
class RealmEmoji(ModelReprMixin, models.Model):
author = models.ForeignKey('UserProfile', blank=True, null=True)

View File

@@ -815,7 +815,6 @@ class EventsRegisterTest(ZulipTestCase):
('type', equals('realm_domains')),
('op', equals('add')),
('alias', check_dict([
('id', check_int),
('domain', check_string),
])),
])
@@ -827,10 +826,10 @@ class EventsRegisterTest(ZulipTestCase):
schema_checker = check_dict([
('type', equals('realm_domains')),
('op', equals('remove')),
('alias_id', check_int),
('domain', check_string),
])
alias_id = RealmAlias.objects.get(realm=realm, domain='zulip.org').id
events = self.do_test(lambda: do_remove_realm_alias(realm, alias_id))
alias = RealmAlias.objects.get(realm=realm, domain='zulip.org')
events = self.do_test(lambda: do_remove_realm_alias(realm, alias.domain))
error = schema_checker('events[0]', events[0])
self.assert_on_error(error)

View File

@@ -47,12 +47,13 @@ class RealmAliasTest(ZulipTestCase):
# type: () -> None
self.login("iago@zulip.com")
realm = get_realm('zulip')
alias_id = RealmAlias.objects.create(realm=realm, domain='zulip.org').id
RealmAlias.objects.create(realm=realm, domain='zulip.org')
aliases_count = RealmAlias.objects.count()
result = self.client_delete("/json/realm/domains/{0}".format(alias_id + 1))
self.assert_json_error(result, 'No such entry found.')
result = self.client_delete("/json/realm/domains/non-existent.com")
self.assertEqual(result.status_code, 400)
self.assert_json_error(result, 'No entry found for domain non-existent.com.')
result = self.client_delete("/json/realm/domains/{0}".format(alias_id))
result = self.client_delete("/json/realm/domains/zulip.org")
self.assert_json_success(result)
self.assertEqual(RealmAlias.objects.count(), aliases_count - 1)

View File

@@ -37,11 +37,11 @@ def create_alias(request, user_profile, domain=REQ(validator=check_string)):
@require_realm_admin
@has_request_variables
def delete_alias(request, user_profile, alias_id):
# type: (HttpRequest, UserProfile, int) -> (HttpResponse)
def delete_alias(request, user_profile, domain):
# type: (HttpRequest, UserProfile, Text) -> (HttpResponse)
try:
# Ensure alias_id is an integer. Django passes captured url parameters as strings.
do_remove_realm_alias(user_profile.realm, int(alias_id))
RealmAlias.objects.get(realm=user_profile.realm, domain=domain)
do_remove_realm_alias(user_profile.realm, domain)
except RealmAlias.DoesNotExist:
return json_error(_('No such entry found.'))
return json_error(_('No entry found for domain %(domain)s.' % {'domain': domain}))
return json_success()

View File

@@ -168,7 +168,7 @@ v1_api_and_json_patterns = [
url(r'^realm/domains$', rest_dispatch,
{'GET': 'zerver.views.realm_aliases.list_aliases',
'POST': 'zerver.views.realm_aliases.create_alias'}),
url(r'^realm/domains/(?P<alias_id>\d+)$', rest_dispatch,
url(r'^realm/domains/(?P<domain>\S+)$', rest_dispatch,
{'DELETE': 'zerver.views.realm_aliases.delete_alias'}),
# realm/emoji -> zerver.views.realm_emoji