diff --git a/api/tacticalrmm/automation/tests.py b/api/tacticalrmm/automation/tests.py index 7cf5e910..d2774b8f 100644 --- a/api/tacticalrmm/automation/tests.py +++ b/api/tacticalrmm/automation/tests.py @@ -66,7 +66,8 @@ class TestPolicyViews(BaseTestCase): self.check_not_authenticated("post", url) @patch("automation.tasks.generate_agent_checks_from_policies_task.delay") - def test_update_policy(self, mock_task): + @patch("automation.tasks.generate_agent_tasks_from_policies_task.delay") + def test_update_policy(self, mock_tasks_task, mock_checks_task): url = f"/automation/policies/{self.policy.pk}/" valid_payload = { @@ -80,7 +81,8 @@ class TestPolicyViews(BaseTestCase): self.assertEqual(resp.status_code, 200) # only called if active or enforced are updated - mock_task.assert_not_called() + mock_checks_task.assert_not_called() + mock_tasks_task.assert_not_called() valid_payload = { "name": "Test Policy Update", @@ -91,18 +93,21 @@ class TestPolicyViews(BaseTestCase): resp = self.client.put(url, valid_payload, format="json") self.assertEqual(resp.status_code, 200) - mock_task.assert_called_with(policypk=self.policy.pk, clear=True) + mock_checks_task.assert_called_with(policypk=self.policy.pk, clear=True) + mock_tasks_task.assert_called_with(policypk=self.policy.pk, clear=True) self.check_not_authenticated("put", url) @patch("automation.tasks.generate_agent_checks_from_policies_task.delay") - def test_delete_policy(self, mock_task): + @patch("automation.tasks.generate_agent_tasks_from_policies_task.delay") + def test_delete_policy(self, mock_tasks_task, mock_checks_task): url = f"/automation/policies/{self.policy.pk}/" resp = self.client.delete(url, format="json") self.assertEqual(resp.status_code, 200) - mock_task.assert_called_with(policypk=self.policy.pk, clear=True) + mock_checks_task.assert_called_with(policypk=self.policy.pk, clear=True) + mock_tasks_task.assert_called_with(policypk=self.policy.pk, clear=True) self.check_not_authenticated("delete", url) @@ -169,7 +174,9 @@ class TestPolicyViews(BaseTestCase): @patch("agents.models.Agent.generate_checks_from_policies") @patch("automation.tasks.generate_agent_checks_by_location_task.delay") - def test_update_policy_add(self, mock_task, mock_agent_generate_checks): + @patch("agents.models.Agent.generate_tasks_from_policies") + @patch("automation.tasks.generate_agent_tasks_by_location_task.delay") + def test_update_policy_add(self, mock_tasks_location_task, mock_tasks_task, mock_checks_location_task, mock_checks_task): url = f"/automation/related/" # data setup @@ -189,39 +196,57 @@ class TestPolicyViews(BaseTestCase): # test client add resp = self.client.post(url, client_payload, format="json") self.assertEqual(resp.status_code, 200) + # called because the relation changed - mock_task.assert_called_with(location={"client": client.client}, clear=True) - mock_task.reset_mock() + mock_checks_location_task.assert_called_with(location={"client": client.client}, clear=True) + mock_checks_location_task.reset_mock() + + mock_tasks_location_task.assert_called_with(location={"client": client.client}, clear=True) + mock_tasks_location_task.reset_mock() # test site add resp = self.client.post(url, site_payload, format="json") self.assertEqual(resp.status_code, 200) + # called because the relation changed - mock_task.assert_called_with( + mock_checks_location_task.assert_called_with( location={"client": site.client.client, "site": site.site}, clear=True ) - mock_task.reset_mock() + mock_checks_location_task.reset_mock() + + mock_tasks_location_task.assert_called_with( + location={"client": site.client.client, "site": site.site}, clear=True + ) + mock_tasks_location_task.reset_mock() # test agent add resp = self.client.post(url, agent_payload, format="json") self.assertEqual(resp.status_code, 200) + # called because the relation changed - mock_agent_generate_checks.assert_called_with(clear=True) - mock_agent_generate_checks.reset_mock() + mock_checks_task.assert_called_with(clear=True) + mock_checks_task.reset_mock() + + mock_tasks_task.assert_called_with(clear=True) + mock_tasks_task.reset_mock() # Adding the same relations shouldn't trigger mocks resp = self.client.post(url, client_payload, format="json") self.assertEqual(resp.status_code, 200) - mock_task.assert_not_called() + mock_checks_location_task.assert_not_called() + mock_tasks_location_task.assert_not_called() resp = self.client.post(url, site_payload, format="json") self.assertEqual(resp.status_code, 200) - mock_task.assert_not_called() + mock_checks_location_task.assert_not_called() + mock_tasks_location_task.assert_not_called() resp = self.client.post(url, agent_payload, format="json") self.assertEqual(resp.status_code, 200) + # called because the relation changed - mock_agent_generate_checks.assert_not_called() + mock_checks_task.assert_not_called() + mock_tasks_task.assert_not_called() # test remove client from policy client_payload = {"type": "client", "pk": client.pk, "policy": 0} @@ -235,41 +260,60 @@ class TestPolicyViews(BaseTestCase): # test client remove resp = self.client.post(url, client_payload, format="json") self.assertEqual(resp.status_code, 200) + # called because the relation changed - mock_task.assert_called_with(location={"client": client.client}, clear=True) - mock_task.reset_mock() + mock_checks_location_task.assert_called_with(location={"client": client.client}, clear=True) + mock_checks_location_task.reset_mock() + + mock_tasks_location_task.assert_called_with(location={"client": client.client}, clear=True) + mock_tasks_location_task.reset_mock() # test site remove resp = self.client.post(url, site_payload, format="json") self.assertEqual(resp.status_code, 200) + # called because the relation changed - mock_task.assert_called_with( + mock_checks_location_task.assert_called_with( location={"client": site.client.client, "site": site.site}, clear=True ) - mock_task.reset_mock() + mock_checks_location_task.reset_mock() + + mock_tasks_location_task.assert_called_with( + location={"client": site.client.client, "site": site.site}, clear=True + ) + mock_tasks_location_task.reset_mock() # test agent remove resp = self.client.post(url, agent_payload, format="json") self.assertEqual(resp.status_code, 200) # called because the relation changed - mock_agent_generate_checks.assert_called_with(clear=True) - mock_agent_generate_checks.reset_mock() + mock_checks_task.assert_called_with(clear=True) + mock_checks_task.reset_mock() + + mock_tasks_task.assert_called_with(clear=True) + mock_tasks_task.reset_mock() # adding the same relations shouldn't trigger mocks resp = self.client.post(url, client_payload, format="json") self.assertEqual(resp.status_code, 200) + # shouldn't be called since nothing changed - mock_task.assert_not_called() + mock_checks_location_task.assert_not_called() + mock_tasks_location_task.assert_not_called() resp = self.client.post(url, site_payload, format="json") self.assertEqual(resp.status_code, 200) + # shouldn't be called since nothing changed - mock_task.assert_not_called() + mock_checks_location_task.assert_not_called() + mock_tasks_location_task.assert_not_called() resp = self.client.post(url, agent_payload, format="json") self.assertEqual(resp.status_code, 200) + # shouldn't be called since nothing changed - mock_agent_generate_checks.assert_not_called() + mock_checks_task.assert_not_called() + mock_tasks_task.assert_not_called() self.check_not_authenticated("post", url) @@ -321,16 +365,14 @@ class TestPolicyViews(BaseTestCase): class TestPolicyTasks(BaseTestCase): - def setUp(self): + def test_policy_related(self): # Generates 5 clients with 5 sites each with 5 agents each self.generate_agents(5, 5, 5) - def test_policy_related(self): - agent = self.agents[50] - client = agent.client - site = agent.site + client = Client.objects.get(client=agent.client) + site = Site.objects.get(client=client, site=agent.site) policy = Policy.objects.create( name="Policy Relate Tests", desc="my awesome policy", active=True, @@ -341,16 +383,16 @@ class TestPolicyTasks(BaseTestCase): resp = self.client.get(f"/automation/policies/{policy.pk}/related/", format="json") - self.assertEquals(len(resp.data.clients), 1) - self.assertEquals(len(resp.data.sites), 5) - self.assertEquals(len(resp.data.agents), 25) + self.assertEqual(resp.status_code, 200) + self.assertEquals(len(resp.data["clients"]), 1) + self.assertEquals(len(resp.data["sites"]), 5) + self.assertEquals(len(resp.data["agents"]), 25) # Add Site to Policy and the agents and sites length shouldn't change policy.sites.add(site) - self.assertEquals(len(resp.data.sites), 5) - self.assertEquals(len(resp.data.agents), 25) + self.assertEquals(len(resp.data["sites"]), 5) + self.assertEquals(len(resp.data["agents"]), 25) # Add Agent to Policy and the agents length shouldn't change policy.agents.add(agent) - self.assertEquals(len(resp.data.agents), 25) - \ No newline at end of file + self.assertEquals(len(resp.data["agents"]), 25) diff --git a/api/tacticalrmm/tacticalrmm/test.py b/api/tacticalrmm/tacticalrmm/test.py index 1361202b..1721b1d3 100644 --- a/api/tacticalrmm/tacticalrmm/test.py +++ b/api/tacticalrmm/tacticalrmm/test.py @@ -129,7 +129,7 @@ class BaseTestCase(TestCase): def generate_agents(self, numOfAgents, numOfClients, numOfSites): - self.agents = None + self.agents = list() for c in range(numOfClients): client = Client.objects.create( diff --git a/docker/api-test/settings.py b/docker/api-test/settings.py index 6f911df8..cc648ef9 100644 --- a/docker/api-test/settings.py +++ b/docker/api-test/settings.py @@ -35,6 +35,7 @@ INSTALLED_APPS = [ "autotasks", "logs", "scripts", + "alerts" ] MIDDLEWARE = [