|
@@ -1,526 +0,0 @@
|
|
|
-import pytest
|
|
|
-from tests.supports import login, get_csrf
|
|
|
-from app import models
|
|
|
-#from app.utils import COMPARISONS
|
|
|
-from lxml import html
|
|
|
-#from random import choice, sample, randrange
|
|
|
-#from math import ceil
|
|
|
-#import uuid
|
|
|
-
|
|
|
-# TODO:
|
|
|
-#
|
|
|
-# run_testrun X
|
|
|
-# export_testrun X
|
|
|
-# import_testsun X
|
|
|
-# upload_datafile X
|
|
|
-# update_datafile X
|
|
|
-# update_testsun X
|
|
|
-# get_results
|
|
|
-# get_charts
|
|
|
-# dashboard
|
|
|
-# help_index
|
|
|
-# help
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-#
|
|
|
-# GET simple routes
|
|
|
-#
|
|
|
-def test_favicon(client):
|
|
|
- r = client.get('/favicon.ico')
|
|
|
- assert r.status_code == 200, f'status code: {r.status_code}'
|
|
|
-
|
|
|
-def test_home(client, user_data):
|
|
|
- # unauthorized access
|
|
|
- r = client.get('/')
|
|
|
- assert r.status_code == 302, f'Unauthorized access. Status code: {r.status_code}'
|
|
|
-
|
|
|
- # authorized access
|
|
|
- login(client, user_data)
|
|
|
- r = client.get('/')
|
|
|
-
|
|
|
- # assert home page rendered
|
|
|
- assert r.status_code == 200, f'Authorized access. Status code: {r.status_code}'
|
|
|
- page = html.fromstring(r.data)
|
|
|
- title = page.xpath('./head/title')[0].text.strip()
|
|
|
- assert 'home' in title.lower(), f"Title: {title}. Should contain 'Home'"
|
|
|
-
|
|
|
- # assert links exist for every baangt element
|
|
|
- items = [link.text.lower() for link in page.xpath('//div[@id="item-list"]/a')]
|
|
|
- assert 'testruns' in items, "Item 'Testruns' is not in item list"
|
|
|
- assert 'test case sequences' in items, "Item 'Test Case Sequences' is not in list"
|
|
|
- assert 'test cases' in items, "Item 'Test Cases' is not in item list"
|
|
|
- assert 'test step sequences' in items, "Item 'Test Step Sequences' is not in item list"
|
|
|
- assert 'test steps' in items, "Item 'Test Steps' is not in item list"
|
|
|
-
|
|
|
- # assert item links are valid
|
|
|
- for link in page.xpath('//div[@id="item-list"]/a'):
|
|
|
- r = client.get(link.attrib['href'])
|
|
|
- assert r.status_code == 200, f'Accessing {link.attrib["href"]}. Status code: {r.status_code}'
|
|
|
-
|
|
|
-
|
|
|
-#
|
|
|
-# GET pages with baangt item lists
|
|
|
-#
|
|
|
-@pytest.mark.parametrize('count', [(1,2), (5,1)])
|
|
|
-def test_testruns(client, user_data, populate):
|
|
|
- url = '/testrun'
|
|
|
-
|
|
|
- # unauthorized access
|
|
|
- r = client.get(url)
|
|
|
- assert r.status_code == 302, f'Unauthorized access. Status code: {r.status_code}'
|
|
|
-
|
|
|
- # authorized access
|
|
|
- login(client, user_data)
|
|
|
- r = client.get(url)
|
|
|
-
|
|
|
- # assert testrun page rendered
|
|
|
- assert r.status_code == 200, f'Authorized access. Status code: {r.status_code}'
|
|
|
- page = html.fromstring(r.data)
|
|
|
- title = page.xpath('./head/title')[0].text.strip()
|
|
|
- assert 'testruns' in title.lower(), f"Title: {title}. Should contain 'Testruns'"
|
|
|
-
|
|
|
- # common buttons
|
|
|
- assert bool(page.xpath('//a[@id="create-testrun"]')), "Button 'Create Testrun' does not exist"
|
|
|
- assert bool(page.xpath('//button[@id="import-testrun"]')), "Button 'Import Testrun' does not exist"
|
|
|
-
|
|
|
- # search field
|
|
|
- assert bool(page.xpath('//input[@id="filter"]')), "Search field does not exist"
|
|
|
-
|
|
|
- # testrun details
|
|
|
- # count
|
|
|
- divs = page.xpath(f'//div[contains(@class, "testrun-item")]')
|
|
|
- items = models.Testrun.query.all()
|
|
|
- assert len(divs) == len(items)
|
|
|
- # get random item
|
|
|
- item = choice(items)
|
|
|
- div = list(filter(lambda d: d.attrib.get('id') == f'item{item.uuid}', divs))
|
|
|
- assert bool(div), 'Page does not contain the item'
|
|
|
- div = div[0]
|
|
|
- assert bool(div.xpath('.//*[contains(@class, "btn-edit")]')), "utton 'Edit' absents"
|
|
|
- assert bool(div.xpath('.//*[contains(@class, "btn-update")]')), "Button 'Update' absents"
|
|
|
- assert bool(div.xpath('.//*[contains(@class, "btn-export")]')), "Button 'Export' absents"
|
|
|
- assert bool(div.xpath('.//*[contains(@class, "btn-run")]')), "Button 'Run' absents"
|
|
|
- assert bool(div.xpath('.//*[contains(@class, "btn-delete")]')), "Button 'Delete' absents"
|
|
|
-
|
|
|
-@pytest.mark.parametrize('count', [(1,1), (1,5)])
|
|
|
-def test_testcase_sequence(client, user_data, populate):
|
|
|
- url = '/testcase_sequence'
|
|
|
-
|
|
|
- # unauthorized access
|
|
|
- r = client.get(url)
|
|
|
- assert r.status_code == 302, f'Unauthorized access. Status code: {r.status_code}'
|
|
|
-
|
|
|
- # authorized access
|
|
|
- login(client, user_data)
|
|
|
- r = client.get(url)
|
|
|
-
|
|
|
- # assert testcase_sequence page rendered
|
|
|
- assert r.status_code == 200, f'Authorized access. Status code: {r.status_code}'
|
|
|
- page = html.fromstring(r.data)
|
|
|
- title = page.xpath('./head/title')[0].text.strip()
|
|
|
- assert 'test case sequences' in title.lower(), f"Title: {title}. Should contain 'Test Case Sequences'"
|
|
|
-
|
|
|
- # common buttons
|
|
|
- assert bool(page.xpath('//a[@id="create-testcase_sequence"]')), "Button 'Create Test Case Sequence' does not exist"
|
|
|
- assert not bool(page.xpath('//button[@id="import-testrun"]')), "Button 'Import' should be hide"
|
|
|
-
|
|
|
- # search field
|
|
|
- assert bool(page.xpath('//input[@id="filter"]')), "Search field does not exist"
|
|
|
-
|
|
|
- # test case sequence details
|
|
|
- # count
|
|
|
- divs = page.xpath(f'//div[contains(@class, "testrun-item")]')
|
|
|
- items = models.TestCaseSequence.query.all()
|
|
|
- assert len(divs) == len(items)
|
|
|
- # get random item
|
|
|
- item = choice(items)
|
|
|
- div = list(filter(lambda d: d.attrib.get('id') == f'item{item.uuid}', divs))
|
|
|
- assert bool(div), 'Page does not contain the item'
|
|
|
- div = div[0]
|
|
|
- assert bool(div.xpath('.//*[contains(@class, "btn-edit")]')), "Button 'Edit' absents"
|
|
|
- assert not bool(div.xpath('.//*[contains(@class, "btn-update")]')), "Button 'Update' should be hide"
|
|
|
- assert not bool(div.xpath('.//*[contains(@class, "btn-export")]')), "Button 'Export' should be hide"
|
|
|
- assert not bool(div.xpath('.//*[contains(@class, "btn-run")]')), "Button 'Run' should be hide"
|
|
|
- assert bool(div.xpath('.//*[contains(@class, "btn-delete")]')), "Button 'Delete' absents"
|
|
|
-
|
|
|
- # datafile buttons
|
|
|
- assert bool(div.xpath('.//*[contains(@class, "btn-datafile-update")]')), "Datafile button 'Update' absents"
|
|
|
- assert bool(div.xpath('.//*[contains(@class, "btn-datafile-download")]')), "Datafile button 'Download' absents"
|
|
|
-
|
|
|
-@pytest.mark.parametrize('count', [(1,1), (1,5)])
|
|
|
-def test_testcase(client, user_data, populate):
|
|
|
- url = '/testcase'
|
|
|
-
|
|
|
- # unauthorized access
|
|
|
- r = client.get(url)
|
|
|
- assert r.status_code == 302, f'Unauthorized access. Status code: {r.status_code}'
|
|
|
-
|
|
|
- # authorized access
|
|
|
- login(client, user_data)
|
|
|
- r = client.get(url)
|
|
|
-
|
|
|
- # assert testcase_sequence page rendered
|
|
|
- assert r.status_code == 200, f'Authorized access. Status code: {r.status_code}'
|
|
|
- page = html.fromstring(r.data)
|
|
|
- title = page.xpath('./head/title')[0].text.strip()
|
|
|
- assert 'test case' in title.lower(), f"Title: {title}. Should contain 'Test Cases'"
|
|
|
-
|
|
|
- # common buttons
|
|
|
- assert bool(page.xpath('//a[@id="create-testcase"]')), "Button 'Create Test Case' does not exist"
|
|
|
- assert not bool(page.xpath('//button[@id="import-testrun"]')), "Button 'Import' should be hide"
|
|
|
-
|
|
|
- # search field
|
|
|
- assert bool(page.xpath('//input[@id="filter"]')), "Search field does not exist"
|
|
|
-
|
|
|
- # test case details
|
|
|
- # count
|
|
|
- divs = page.xpath(f'//div[contains(@class, "testrun-item")]')
|
|
|
- items = models.TestCase.query.all()
|
|
|
- assert len(divs) == len(items)
|
|
|
- # get random item
|
|
|
- item = choice(items)
|
|
|
- div = list(filter(lambda d: d.attrib.get('id') == f'item{item.uuid}', divs))
|
|
|
- assert bool(div), 'Page does not contain the item'
|
|
|
- div = div[0]
|
|
|
- assert bool(div.xpath('.//*[contains(@class, "btn-edit")]')), "Button 'Edit' absents"
|
|
|
- assert not bool(div.xpath('.//*[contains(@class, "btn-update")]')), "Button 'Update' should be hide"
|
|
|
- assert not bool(div.xpath('.//*[contains(@class, "btn-export")]')), "Button 'Export' should be hide"
|
|
|
- assert not bool(div.xpath('.//*[contains(@class, "btn-run")]')), "Button 'Run' should be hide"
|
|
|
- assert bool(div.xpath('.//*[contains(@class, "btn-delete")]')), "Button 'Delete' absents"
|
|
|
-
|
|
|
-@pytest.mark.parametrize('count', [(1,1), (2,5)])
|
|
|
-def test_teststep_sequence(client, user_data, populate):
|
|
|
- url = '/teststep_sequence'
|
|
|
-
|
|
|
- # unauthorized access
|
|
|
- r = client.get(url)
|
|
|
- assert r.status_code == 302, f'Unauthorized access. Status code: {r.status_code}'
|
|
|
-
|
|
|
- # authorized access
|
|
|
- login(client, user_data)
|
|
|
- r = client.get(url)
|
|
|
-
|
|
|
- # assert testcase_sequence page rendered
|
|
|
- assert r.status_code == 200, f'Authorized access. Status code: {r.status_code}'
|
|
|
- page = html.fromstring(r.data)
|
|
|
- title = page.xpath('./head/title')[0].text.strip()
|
|
|
- assert 'test step sequences' in title.lower(), f"Title: {title}. Should contain 'Test Step Sequences'"
|
|
|
-
|
|
|
- # common buttons
|
|
|
- assert bool(page.xpath('//a[@id="create-teststep_sequence"]')), "Button 'Create Test Step Sequence' does not exist"
|
|
|
- assert not bool(page.xpath('//button[@id="import-testrun"]')), "Button 'Import' should be hide"
|
|
|
-
|
|
|
- # search field
|
|
|
- assert bool(page.xpath('//input[@id="filter"]')), "Search field does not exist"
|
|
|
-
|
|
|
- # test step sequence details
|
|
|
- # count
|
|
|
- divs = page.xpath(f'//div[contains(@class, "testrun-item")]')
|
|
|
- items = models.TestStepSequence.query.all()
|
|
|
- assert len(divs) == len(items)
|
|
|
- # get random item
|
|
|
- item = choice(items)
|
|
|
- div = list(filter(lambda d: d.attrib.get('id') == f'item{item.uuid}', divs))
|
|
|
- assert bool(div), 'Page does not contain the item'
|
|
|
- div = div[0]
|
|
|
- assert bool(div.xpath('.//*[contains(@class, "btn-edit")]')), "Button 'Edit' absents"
|
|
|
- assert not bool(div.xpath('.//*[contains(@class, "btn-update")]')), "Button 'Update' should be hide"
|
|
|
- assert not bool(div.xpath('.//*[contains(@class, "btn-export")]')), "Button 'Export' should be hide"
|
|
|
- assert not bool(div.xpath('.//*[contains(@class, "btn-run")]')), "Button 'Run' should be hide"
|
|
|
- assert bool(div.xpath('.//*[contains(@class, "btn-delete")]')), "Button 'Delete' absents"
|
|
|
-
|
|
|
-@pytest.mark.parametrize('count', [(1,1), (2,5)])
|
|
|
-def test_teststep(client, user_data, populate):
|
|
|
- url = '/teststep'
|
|
|
-
|
|
|
- # unauthorized access
|
|
|
- r = client.get(url)
|
|
|
- assert r.status_code == 302, f'Unauthorized access. Status code: {r.status_code}'
|
|
|
-
|
|
|
- # authorized access
|
|
|
- login(client, user_data)
|
|
|
- r = client.get(url)
|
|
|
-
|
|
|
- # assert testcase_sequence page rendered
|
|
|
- assert r.status_code == 200, f'Authorized access. Status code: {r.status_code}'
|
|
|
- page = html.fromstring(r.data)
|
|
|
- title = page.xpath('./head/title')[0].text.strip()
|
|
|
- assert 'test steps' in title.lower(), f"Title: {title}. Should contain 'Test Steps'"
|
|
|
-
|
|
|
- # common buttons
|
|
|
- assert bool(page.xpath('//a[@id="create-teststep"]')), "Button 'Create Test Step' does not exist"
|
|
|
- assert not bool(page.xpath('//button[@id="import-testrun"]')), "Button 'Import' should be hide"
|
|
|
-
|
|
|
- # search field
|
|
|
- assert bool(page.xpath('//input[@id="filter"]')), "Search field does not exist"
|
|
|
-
|
|
|
- # test step details
|
|
|
- divs = page.xpath(f'//div[contains(@class, "testrun-item")]')
|
|
|
- items = models.TestStepExecution.query.all()
|
|
|
- assert len(divs) == len(items)
|
|
|
- # get random item
|
|
|
- item = choice(items)
|
|
|
- div = list(filter(lambda d: d.attrib.get('id') == f'item{item.uuid}', divs))
|
|
|
- assert bool(div), 'Page does not contain the item'
|
|
|
- div = div[0]
|
|
|
- assert bool(div.xpath('.//*[contains(@class, "btn-edit")]')), "Button 'Edit' absents"
|
|
|
- assert not bool(div.xpath('.//*[contains(@class, "btn-update")]')), "Button 'Update' should be hide"
|
|
|
- assert not bool(div.xpath('.//*[contains(@class, "btn-export")]')), "Button 'Export' should be hide"
|
|
|
- assert not bool(div.xpath('.//*[contains(@class, "btn-run")]')), "Button 'Run' should be hide"
|
|
|
- assert bool(div.xpath('.//*[contains(@class, "btn-delete")]')), "Button 'Delete' absents"
|
|
|
-
|
|
|
-
|
|
|
-#
|
|
|
-# System POST Routes
|
|
|
-#
|
|
|
-@pytest.mark.parametrize('count', [(1,1), (5,3)])
|
|
|
-def test_delete_testrun_cascade(client, user_data, populate):
|
|
|
- # delete testrun item and its children
|
|
|
- item = models.Testrun.query.first()
|
|
|
- url = f'/testrun/{item.uuid}/delete'
|
|
|
-
|
|
|
- # unauthorized access
|
|
|
- r = client.post(url)
|
|
|
- assert r.status_code == 302, f'Unauthorized access. Status code: {r.status_code}'
|
|
|
-
|
|
|
- # authorized access
|
|
|
- login(client, user_data)
|
|
|
- r = client.post(url)
|
|
|
- assert r.status_code == 200, f'Deleting Testrun. Status code: {r.status_code}'
|
|
|
- item_num = populate[0]-1
|
|
|
- assert models.Testrun.query.count() == item_num, 'Testrun NOT deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestCaseSequence.query.count() == item_num, 'Test Case Sequence NOT deleted'
|
|
|
- assert models.DataFile.query.count() == item_num, 'Data File NOT deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestCase.query.count() == item_num, 'Test Case NOT deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestStepSequence.query.count() == item_num, 'Test Step Sequence NOT deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestStepExecution.query.count() == item_num, 'Test Step NOT deleted'
|
|
|
-
|
|
|
- # try to delete item by random id
|
|
|
- url = f'/testrun/{uuid.uuid4()}/delete'
|
|
|
- r = client.post(url)
|
|
|
- assert r.status_code == 400, f'Deleting item that does not exist. Status code: {r.status_code}'
|
|
|
-
|
|
|
-@pytest.mark.parametrize('count', [(1,1), (5,3)])
|
|
|
-def test_delete_testcase_sequence_cascade(client, user_data, populate):
|
|
|
- # delete testcase sequence item and its children
|
|
|
- item = models.TestCaseSequence.query.first()
|
|
|
- url = f'/testcase_sequence/{item.uuid}/delete'
|
|
|
-
|
|
|
- # unauthorized access
|
|
|
- r = client.post(url)
|
|
|
- assert r.status_code == 302, f'Unauthorized access. Status code: {r.status_code}'
|
|
|
-
|
|
|
- # authorized access
|
|
|
- login(client, user_data)
|
|
|
- r = client.post(url)
|
|
|
- assert r.status_code == 200, f'Deleting TestCaseSequence. Status code: {r.status_code}'
|
|
|
- item_num = populate[0]
|
|
|
- assert models.Testrun.query.count() == item_num, 'Testrun deleted'
|
|
|
- item_num = populate[0]*populate[1] - 1
|
|
|
- assert models.TestCaseSequence.query.count() == item_num, 'Test Case Sequence NOT deleted'
|
|
|
- assert models.DataFile.query.count() == item_num, 'Data File NOT deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestCase.query.count() == item_num, 'Test Case NOT deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestStepSequence.query.count() == item_num, 'Test Step Sequence NOT deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestStepExecution.query.count() == item_num, 'Test Step NOT deleted'
|
|
|
-
|
|
|
-@pytest.mark.parametrize('count', [(1,1), (5,3)])
|
|
|
-def test_delete_testcase_cascade(client, user_data, populate):
|
|
|
- # delete testcase item and its children
|
|
|
- item = models.TestCase.query.first()
|
|
|
- url = f'/testcase/{item.uuid}/delete'
|
|
|
-
|
|
|
- # unauthorized access
|
|
|
- r = client.post(url)
|
|
|
- assert r.status_code == 302, f'Unauthorized access. Status code: {r.status_code}'
|
|
|
-
|
|
|
- # authorized access
|
|
|
- login(client, user_data)
|
|
|
- r = client.post(url)
|
|
|
- assert r.status_code == 200, f'Deleting TestCase. Status code: {r.status_code}'
|
|
|
- item_num = populate[0]
|
|
|
- assert models.Testrun.query.count() == item_num, 'Testrun deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestCaseSequence.query.count() == item_num, 'Test Case Sequence deleted'
|
|
|
- assert models.DataFile.query.count() == item_num, 'Data File deleted'
|
|
|
- item_num = item_num*populate[1] - 1
|
|
|
- assert models.TestCase.query.count() == item_num, 'Test Case NOT deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestStepSequence.query.count() == item_num, 'Test Step Sequence NOT deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestStepExecution.query.count() == item_num, 'Test Step NOT deleted'
|
|
|
-
|
|
|
-@pytest.mark.parametrize('count', [(1,1), (5,3)])
|
|
|
-def test_delete_teststep_sequence_cascade(client, user_data, populate):
|
|
|
- # delete teststep sequence item and its children
|
|
|
- item = models.TestStepSequence.query.first()
|
|
|
- url = f'/teststep_sequence/{item.uuid}/delete'
|
|
|
-
|
|
|
- # unauthorized access
|
|
|
- r = client.post(url)
|
|
|
- assert r.status_code == 302, f'Unauthorized access. Status code: {r.status_code}'
|
|
|
-
|
|
|
- # authorized access
|
|
|
- login(client, user_data)
|
|
|
- r = client.post(url)
|
|
|
- assert r.status_code == 200, f'Deleting TestStepSequence. Status code: {r.status_code}'
|
|
|
- item_num = populate[0]
|
|
|
- assert models.Testrun.query.count() == item_num, 'Testrun deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestCaseSequence.query.count() == item_num, 'Test Case Sequence deleted'
|
|
|
- assert models.DataFile.query.count() == item_num, 'Data File deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestCase.query.count() == item_num, 'Test Case deleted'
|
|
|
- item_num = item_num*populate[1] - 1
|
|
|
- assert models.TestStepSequence.query.count() == item_num, 'Test Step Sequence NOT deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestStepExecution.query.count() == item_num, 'Test Step NOT deleted'
|
|
|
-
|
|
|
-@pytest.mark.parametrize('count', [(1,1), (5,3)])
|
|
|
-def test_delete_teststep_cascade(client, user_data, populate):
|
|
|
- # delete teststep item
|
|
|
- item = models.TestStepExecution.query.first()
|
|
|
- url = f'/teststep/{item.uuid}/delete'
|
|
|
-
|
|
|
- # unauthorized access
|
|
|
- r = client.post(url)
|
|
|
- assert r.status_code == 302, f'Unauthorized access. Status code: {r.status_code}'
|
|
|
-
|
|
|
- # authorized access
|
|
|
- login(client, user_data)
|
|
|
- r = client.post(url)
|
|
|
- assert r.status_code == 200, f'Deleting TestStep. Status code: {r.status_code}'
|
|
|
- item_num = populate[0]
|
|
|
- assert models.Testrun.query.count() == item_num, 'Testrun deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestCaseSequence.query.count() == item_num, 'Test Case Sequence deleted'
|
|
|
- assert models.DataFile.query.count() == item_num, 'Data File deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestCase.query.count() == item_num, 'Test Case deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestStepSequence.query.count() == item_num, 'Test Step Sequence deleted'
|
|
|
- item_num = item_num*populate[1] - 1
|
|
|
- assert models.TestStepExecution.query.count() == item_num, 'Test Step NOT deleted'
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-#
|
|
|
-# System DELETE Routes
|
|
|
-#
|
|
|
-@pytest.mark.parametrize('count', [(1,1), (3,2)])
|
|
|
-def test_delete_testrun_cascade(client, user_data, populate):
|
|
|
- # delete testrun item
|
|
|
- item = models.Testrun.query.first()
|
|
|
- url = f'/testrun/{item.uuid}/delete'
|
|
|
-
|
|
|
- # unauthorized access
|
|
|
- r = client.delete(url)
|
|
|
- assert r.status_code == 302, f'Unauthorized access. Status code: {r.status_code}'
|
|
|
-
|
|
|
- # authorized access
|
|
|
- login(client, user_data)
|
|
|
- r = client.delete(url)
|
|
|
- assert r.status_code == 200, f'Deleting Testrun. Status code: {r.status_code}'
|
|
|
- item_num = populate[0]-1
|
|
|
- assert models.Testrun.query.count() == item_num, 'Testrun NOT deleted'
|
|
|
- item_num = populate[0]*populate[1]
|
|
|
- assert models.TestCaseSequence.query.count() == item_num, 'Test Case Sequence deleted'
|
|
|
- assert models.DataFile.query.count() == item_num, 'Data File deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestCase.query.count() == item_num, 'Test Case deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestStepSequence.query.count() == item_num, 'Test Step Sequence deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestStepExecution.query.count() == item_num, 'Test Step deleted'
|
|
|
-
|
|
|
- # try to delete item by random id
|
|
|
- url = f'/testrun/{uuid.uuid4()}/delete'
|
|
|
- r = client.delete(url)
|
|
|
- assert r.status_code == 400, f'Deleting item that does not exist. Status code: {r.status_code}'
|
|
|
-
|
|
|
-@pytest.mark.parametrize('count', [(1,1), (3,2)])
|
|
|
-def test_delete_testcase_sequence_cascade(client, user_data, populate):
|
|
|
- # delete testcase sequence item
|
|
|
- item = models.TestCaseSequence.query.first()
|
|
|
- url = f'/testcase_sequence/{item.uuid}/delete'
|
|
|
-
|
|
|
- # unauthorized access
|
|
|
- r = client.delete(url)
|
|
|
- assert r.status_code == 302, f'Unauthorized access. Status code: {r.status_code}'
|
|
|
-
|
|
|
- # authorized access
|
|
|
- login(client, user_data)
|
|
|
- r = client.delete(url)
|
|
|
- assert r.status_code == 200, f'Deleting TestCaseSequence. Status code: {r.status_code}'
|
|
|
- item_num = populate[0]
|
|
|
- assert models.Testrun.query.count() == item_num, 'Testrun deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestCaseSequence.query.count() == item_num-1, 'Test Case Sequence NOT deleted'
|
|
|
- assert models.DataFile.query.count() == item_num, 'Data File deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestCase.query.count() == item_num, 'Test Case deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestStepSequence.query.count() == item_num, 'Test Step Sequence deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestStepExecution.query.count() == item_num, 'Test Step deleted'
|
|
|
-
|
|
|
-@pytest.mark.parametrize('count', [(1,1), (5,3)])
|
|
|
-def test_delete_testcase_cascade(client, user_data, populate):
|
|
|
- # delete testcase item
|
|
|
- item = models.TestCase.query.first()
|
|
|
- url = f'/testcase/{item.uuid}/delete'
|
|
|
-
|
|
|
- # unauthorized access
|
|
|
- r = client.delete(url)
|
|
|
- assert r.status_code == 302, f'Unauthorized access. Status code: {r.status_code}'
|
|
|
-
|
|
|
- # authorized access
|
|
|
- login(client, user_data)
|
|
|
- r = client.delete(url)
|
|
|
- assert r.status_code == 200, f'Deleting TestCase. Status code: {r.status_code}'
|
|
|
- item_num = populate[0]
|
|
|
- assert models.Testrun.query.count() == item_num, 'Testrun deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestCaseSequence.query.count() == item_num, 'Test Case Sequence deleted'
|
|
|
- assert models.DataFile.query.count() == item_num, 'Data File deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestCase.query.count() == item_num-1, 'Test Case NOT deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestStepSequence.query.count() == item_num, 'Test Step Sequence deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestStepExecution.query.count() == item_num, 'Test Step deleted'
|
|
|
-
|
|
|
-@pytest.mark.parametrize('count', [(1,1), (5,3)])
|
|
|
-def test_delete_teststep_sequence_cascade(client, user_data, populate):
|
|
|
- # delete teststep sequence item and its children
|
|
|
- item = models.TestStepSequence.query.first()
|
|
|
- url = f'/teststep_sequence/{item.uuid}/delete'
|
|
|
-
|
|
|
- # unauthorized access
|
|
|
- r = client.delete(url)
|
|
|
- assert r.status_code == 302, f'Unauthorized access. Status code: {r.status_code}'
|
|
|
-
|
|
|
- # authorized access
|
|
|
- login(client, user_data)
|
|
|
- r = client.delete(url)
|
|
|
- assert r.status_code == 200, f'Deleting TestStepSequence. Status code: {r.status_code}'
|
|
|
- item_num = populate[0]
|
|
|
- assert models.Testrun.query.count() == item_num, 'Testrun deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestCaseSequence.query.count() == item_num, 'Test Case Sequence deleted'
|
|
|
- assert models.DataFile.query.count() == item_num, 'Data File deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestCase.query.count() == item_num, 'Test Case deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestStepSequence.query.count() == item_num-1, 'Test Step Sequence NOT deleted'
|
|
|
- item_num *= populate[1]
|
|
|
- assert models.TestStepExecution.query.count() == item_num, 'Test Step deleted'
|