def test_read(self): for _ in range(3): factory.make_DHCPSnippet() response = self.client.get(self.get_dhcp_snippets_uri()) self.assertEqual(http.client.OK, response.status_code, response.content) expected_ids = [ dhcp_snippet.id for dhcp_snippet in DHCPSnippet.objects.all() ] result_ids = [ dhcp_snippet['id'] for dhcp_snippet in json.loads(response.content.decode()) ] self.assertItemsEqual(expected_ids, result_ids)
def test_revert_requires_to(self): user = factory.make_admin() handler = DHCPSnippetHandler(user, {}, None) dhcp_snippet = factory.make_DHCPSnippet() self.assertRaises( HandlerValidationError, handler.revert, {"id": dhcp_snippet.id} )
def test_revert(self): self.become_admin() dhcp_snippet = factory.make_DHCPSnippet() textfile_ids = [dhcp_snippet.value.id] for _ in range(10): dhcp_snippet.value = dhcp_snippet.value.update( factory.make_string()) dhcp_snippet.save() textfile_ids.append(dhcp_snippet.value.id) revert_to = random.randint(-10, -1) reverted_ids = textfile_ids[revert_to:] remaining_ids = textfile_ids[:revert_to] response = self.client.post(self.get_dhcp_snippet_uri(dhcp_snippet), { 'op': 'revert', 'to': revert_to, }) self.assertEqual(http.client.OK, response.status_code, response.content) parsed_dhcp_snippet = json.loads(response.content.decode()) self.assertEquals( VersionedTextFile.objects.get(id=textfile_ids[revert_to - 1]).data, parsed_dhcp_snippet['value']) for i in reverted_ids: self.assertRaises(VersionedTextFile.DoesNotExist, VersionedTextFile.objects.get, id=i) for i in remaining_ids: self.assertIsNotNone(VersionedTextFile.objects.get(id=i)) event = Event.objects.get(type__level=AUDIT) self.assertIsNotNone(event) self.assertEqual( event.description, "DHCP snippet '%s' reverted to revision '%s'" % (dhcp_snippet.name, revert_to) + " by '%(username)s'.")
def test_get_with_subnet(self): user = factory.make_User() handler = DHCPSnippetHandler(user, {}) subnet = factory.make_Subnet() dhcp_snippet = factory.make_DHCPSnippet(subnet=subnet) self.assertEqual(self.dehydrate_dhcp_snippet(dhcp_snippet), handler.get({'id': dhcp_snippet.id}))
def test_get_with_node(self): user = factory.make_User() handler = DHCPSnippetHandler(user, {}) node = factory.make_Node() dhcp_snippet = factory.make_DHCPSnippet(node=node) self.assertEqual(self.dehydrate_dhcp_snippet(dhcp_snippet), handler.get({'id': dhcp_snippet.id}))
def test_revert(self): user = factory.make_admin() handler = DHCPSnippetHandler(user, {}, None) dhcp_snippet = factory.make_DHCPSnippet() textfile_ids = [dhcp_snippet.value.id] for _ in range(10): dhcp_snippet.value = dhcp_snippet.value.update( factory.make_string()) dhcp_snippet.save() textfile_ids.append(dhcp_snippet.value.id) revert_to = random.randint(-10, -1) reverted_ids = textfile_ids[revert_to:] remaining_ids = textfile_ids[:revert_to] handler.revert({"id": dhcp_snippet.id, "to": revert_to}) dhcp_snippet = reload_object(dhcp_snippet) self.assertEqual( VersionedTextFile.objects.get(id=textfile_ids[revert_to - 1]).data, dhcp_snippet.value.data, ) for i in reverted_ids: self.assertRaises( VersionedTextFile.DoesNotExist, VersionedTextFile.objects.get, id=i, ) for i in remaining_ids: self.assertIsNotNone(VersionedTextFile.objects.get(id=i))
def test_read_by_name(self): dhcp_snippet = factory.make_DHCPSnippet() # Generate some history dhcp_snippet.value = dhcp_snippet.value.update(factory.make_string()) dhcp_snippet.save() uri = '/api/2.0/dhcp-snippets/%s/' % dhcp_snippet.name response = self.client.get(uri) self.assertEqual( http.client.OK, response.status_code, response.content) parsed_dhcp_snippet = json.loads(response.content.decode()) self.assertThat(parsed_dhcp_snippet, Equals({ 'id': dhcp_snippet.id, 'name': dhcp_snippet.name, 'value': dhcp_snippet.value.data, 'description': dhcp_snippet.description, 'history': [ { 'id': dhcp_snippet.value.id, 'value': dhcp_snippet.value.data, 'created': ANY, }, { 'id': dhcp_snippet.value.previous_version.id, 'value': dhcp_snippet.value.previous_version.data, 'created': ANY, }, ], 'enabled': dhcp_snippet.enabled, 'node': None, 'subnet': None, 'global_snippet': True, 'resource_uri': self.get_dhcp_snippet_uri(dhcp_snippet), }))
def test_update_admin_only(self): dhcp_snippet = factory.make_DHCPSnippet() new_value = factory.make_string() response = self.client.put(self.get_dhcp_snippet_uri(dhcp_snippet), {'value': new_value}) self.assertEqual(http.client.FORBIDDEN, response.status_code, response.content)
def test_delete_admin_only(self): dhcp_snippet = factory.make_DHCPSnippet() response = self.client.delete(self.get_dhcp_snippet_uri(dhcp_snippet)) self.assertEqual( http.client.FORBIDDEN, response.status_code, response.content ) self.assertIsNotNone(reload_object(dhcp_snippet))
def test_get_dhcp_snippet_or_404(self): dhcp_snippets = [factory.make_DHCPSnippet() for _ in range(3)] dhcp_snippet = random.choice(dhcp_snippets) self.assertEqual( dhcp_snippet, DHCPSnippet.objects.get_dhcp_snippet_or_404(dhcp_snippet.id), )
def test_delete_deletes_dhcp_snippet(self): self.become_admin() dhcp_snippet = factory.make_DHCPSnippet() response = self.client.delete(self.get_dhcp_snippet_uri(dhcp_snippet)) self.assertEqual(http.client.NO_CONTENT, response.status_code, response.content) self.assertIsNone(reload_object(dhcp_snippet))
def test__updates_description(self): dhcp_snippet = factory.make_DHCPSnippet() description = factory.make_string() form = DHCPSnippetForm( instance=dhcp_snippet, data={'description': description}) self.assertTrue(form.is_valid(), form.errors) dhcp_snippet = form.save() self.assertEqual(description, dhcp_snippet.description)
def test__updates_node(self): dhcp_snippet = factory.make_DHCPSnippet() node = factory.make_Node() form = DHCPSnippetForm( instance=dhcp_snippet, data={'node': node.system_id}) self.assertTrue(form.is_valid(), form.errors) dhcp_snippet = form.save() self.assertEqual(node, dhcp_snippet.node)
def test_delete(self): user = factory.make_admin() handler = DHCPSnippetHandler(user, {}) dhcp_snippet = factory.make_DHCPSnippet() handler.delete({'id': dhcp_snippet.id}) self.assertRaises(DHCPSnippet.DoesNotExist, DHCPSnippet.objects.get, id=dhcp_snippet.id)
def test__update_global_snippet_resets_subnet(self): subnet = factory.make_Subnet() dhcp_snippet = factory.make_DHCPSnippet(subnet=subnet) form = DHCPSnippetForm( instance=dhcp_snippet, data={"global_snippet": True}) self.assertTrue(form.is_valid(), form.errors) dhcp_snippet = form.save() self.assertIsNone(dhcp_snippet.subnet)
def test__update_global_snippet_resets_node(self): node = factory.make_Node() dhcp_snippet = factory.make_DHCPSnippet(node=node) form = DHCPSnippetForm( instance=dhcp_snippet, data={"global_snippet": True}) self.assertTrue(form.is_valid(), form.errors) dhcp_snippet = form.save() self.assertIsNone(dhcp_snippet.node)
def test__updates_subnet(self): dhcp_snippet = factory.make_DHCPSnippet() subnet = factory.make_Subnet() form = DHCPSnippetForm( instance=dhcp_snippet, data={'subnet': subnet.id}) self.assertTrue(form.is_valid(), form.errors) dhcp_snippet = form.save() self.assertEqual(subnet, dhcp_snippet.subnet)
def test_get_global(self): user = factory.make_User() handler = DHCPSnippetHandler(user, {}, None) dhcp_snippet = factory.make_DHCPSnippet() self.assertEqual( self.dehydrate_dhcp_snippet(dhcp_snippet), handler.get({"id": dhcp_snippet.id}), )
def test_update(self): user = factory.make_admin() handler = DHCPSnippetHandler(user, {}) dhcp_snippet = factory.make_DHCPSnippet() node = factory.make_Node() handler.update({'id': dhcp_snippet.id, 'node': node.system_id}) dhcp_snippet = reload_object(dhcp_snippet) self.assertEquals(node, dhcp_snippet.node)
def test_list(self): user = factory.make_User() handler = DHCPSnippetHandler(user, {}, None) expected_dhcp_snippets = [ self.dehydrate_dhcp_snippet(factory.make_DHCPSnippet()) for _ in range(3) ] self.assertItemsEqual(expected_dhcp_snippets, handler.list({}))
def test__updates_name(self): dhcp_snippet = factory.make_DHCPSnippet() name = factory.make_name('name') form = DHCPSnippetForm( instance=dhcp_snippet, data={'name': name}) self.assertTrue(form.is_valid(), form.errors) dhcp_snippet = form.save() self.assertEqual(name, dhcp_snippet.name)
def test_revert_requires_to_to_be_an_int(self): user = factory.make_admin() handler = DHCPSnippetHandler(user, {}) dhcp_snippet = factory.make_DHCPSnippet() self.assertRaises(HandlerValidationError, handler.revert, { 'id': dhcp_snippet.id, 'to': factory.make_name('to') })
def test__updates_enabled(self): dhcp_snippet = factory.make_DHCPSnippet() enabled = not dhcp_snippet.enabled form = DHCPSnippetForm( instance=dhcp_snippet, data={'enabled': enabled}) self.assertTrue(form.is_valid(), form.errors) dhcp_snippet = form.save() self.assertEqual(enabled, dhcp_snippet.enabled)
def test__cannot_update_both_node_and_subnet(self): dhcp_snippet = factory.make_DHCPSnippet() form = DHCPSnippetForm(instance=dhcp_snippet, data={ 'node': factory.make_Node().system_id, 'subnet': factory.make_Subnet().id, }) self.assertFalse(form.is_valid())
def test__updates_subnet_when_node_set(self): dhcp_snippet = factory.make_DHCPSnippet(node=factory.make_Node()) subnet = factory.make_Subnet() form = DHCPSnippetForm( instance=dhcp_snippet, data={'subnet': subnet.id}) self.assertTrue(form.is_valid(), form.errors) dhcp_snippet = form.save() self.assertIsNone(dhcp_snippet.node) self.assertEquals(subnet, dhcp_snippet.subnet)
def test_revert_requires_to(self): self.become_admin() dhcp_snippet = factory.make_DHCPSnippet() response = self.client.post(self.get_dhcp_snippet_uri(dhcp_snippet), {"op": "revert"}) self.assertEqual(http.client.BAD_REQUEST, response.status_code, response.content) self.assertEqual(b"You must specify where to revert to", response.content)
def test_revert_errors_on_invalid_id(self): user = factory.make_admin() handler = DHCPSnippetHandler(user, {}) dhcp_snippet = factory.make_DHCPSnippet() textfile = VersionedTextFile.objects.create(data=factory.make_string()) self.assertRaises(HandlerValidationError, handler.revert, { 'id': dhcp_snippet.id, 'to': textfile.id })
def test__update_failure_doesnt_delete_value(self): dhcp_snippet = factory.make_DHCPSnippet() value = dhcp_snippet.value.data form = DHCPSnippetForm(instance=dhcp_snippet, data={ 'node': factory.make_Node().system_id, 'subnet': factory.make_Subnet().id, }) self.assertFalse(form.is_valid()) self.assertEquals(value, reload_object(dhcp_snippet).value.data)
def test__updates_value(self): dhcp_snippet = factory.make_DHCPSnippet() old_value = dhcp_snippet.value.data new_value = factory.make_string() form = DHCPSnippetForm( instance=dhcp_snippet, data={'value': new_value}) self.assertTrue(form.is_valid(), form.errors) dhcp_snippet = form.save() self.assertEqual(new_value, dhcp_snippet.value.data) self.assertEqual(old_value, dhcp_snippet.value.previous_version.data)
def test_update(self): self.patch(dhcpsnippet, 'validate_dhcp_config').return_value = {} self.become_admin() dhcp_snippet = factory.make_DHCPSnippet() new_value = factory.make_string() response = self.client.put(self.get_dhcp_snippet_uri(dhcp_snippet), {'value': new_value}) self.assertEqual(http.client.OK, response.status_code, response.content) dhcp_snippet = reload_object(dhcp_snippet) self.assertEqual(new_value, dhcp_snippet.value.data)