Example #1
0
    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)
Example #2
0
 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}
     )
Example #3
0
 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'.")
Example #4
0
 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}))
Example #5
0
 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}))
Example #6
0
 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))
Example #7
0
 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),
     }))
Example #8
0
 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)
Example #9
0
 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))
Example #10
0
 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),
     )
Example #11
0
 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))
Example #12
0
 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)
Example #13
0
 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)
Example #14
0
 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)
Example #15
0
 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)
Example #16
0
 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)
Example #17
0
 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)
Example #18
0
 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}),
     )
Example #19
0
 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)
Example #20
0
 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({}))
Example #21
0
 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)
Example #22
0
 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')
     })
Example #23
0
 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)
Example #24
0
 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())
Example #25
0
 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)
Example #26
0
 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)
Example #27
0
 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
     })
Example #28
0
 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)
Example #29
0
 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)
Example #30
0
 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)