import pytest from django.urls import reverse from project.remotectl.models import RemoteHost, BatchScript, CommandTask @pytest.mark.django_db def test_host_crud(client, user_factory): user = user_factory(username='u1') client.force_login(user) # create resp = client.post(reverse('host_create'), { 'name': 'TestHost', 'hostname': '127.0.0.1', 'port': 22, 'username': 'root', 'auth_method': 'ssh_key', 'key_path': '', 'strict_host_key_checking': True, 'notes': 'n' }) assert resp.status_code == 302 assert RemoteHost.objects.filter(name='TestHost').exists() host = RemoteHost.objects.get(name='TestHost') # edit resp = client.post(f"/hosts/{host.id}/edit/", { 'name': 'TestHost2', 'hostname': '127.0.0.1', 'port': 22, 'username': 'root', 'auth_method': 'ssh_key', 'key_path': '', 'strict_host_key_checking': True, 'notes': 'n2' }) assert resp.status_code == 302 host.refresh_from_db() assert host.name == 'TestHost2' # list resp = client.get(reverse('host_list')) assert resp.status_code == 200 assert 'TestHost2' in resp.content.decode() @pytest.mark.django_db def test_batch_crud(client, user_factory): user = user_factory(username='u2') client.force_login(user) # create resp = client.post(reverse('batch_create'), { 'name': 'batch1', 'description': 'desc', 'script': 'echo one' }) assert resp.status_code == 302 b = BatchScript.objects.get(name='batch1') # edit resp = client.post(f"/batches/{b.id}/edit/", { 'name': 'batch1', 'description': 'desc2', 'script': 'echo two' }) assert resp.status_code == 302 b.refresh_from_db() assert 'two' in b.script # list json resp = client.get(reverse('batch_list_json')) assert resp.status_code == 200 assert 'batch1' in resp.json()[0]['name'] # delete resp = client.post(f"/batches/{b.id}/delete/") assert resp.status_code == 302 assert not BatchScript.objects.filter(id=b.id).exists() @pytest.mark.django_db def test_task_crud_and_json(client, user_factory): user = user_factory(username='u3') client.force_login(user) # create resp = client.post(reverse('task_create'), { 'name': 'task1', 'label': 'Task One', 'command': 'uptime', 'description': 'd' }) assert resp.status_code == 302 t = CommandTask.objects.get(name='task1') # edit resp = client.post(f"/tasks/{t.id}/edit/", { 'name': 'task1', 'label': 'Task 1', 'command': 'echo hi', 'description': 'd2' }) assert resp.status_code == 302 t.refresh_from_db() assert 'echo hi' in t.command # json list resp = client.get(reverse('task_list_json')) assert resp.status_code == 200 data = resp.json() assert any(item['name'] == 'task1' for item in data) # delete resp = client.post(f"/tasks/{t.id}/delete/") assert resp.status_code == 302 assert not CommandTask.objects.filter(id=t.id).exists()