113 lines
4.7 KiB
Python
113 lines
4.7 KiB
Python
|
|
import time
|
||
|
|
import os
|
||
|
|
from pathlib import Path
|
||
|
|
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
|
||
|
|
from selenium.webdriver.common.by import By
|
||
|
|
from selenium.webdriver.firefox.webdriver import WebDriver
|
||
|
|
|
||
|
|
|
||
|
|
class WorkflowTests(StaticLiveServerTestCase):
|
||
|
|
fixtures = ["cafe-data.json"]
|
||
|
|
|
||
|
|
@classmethod
|
||
|
|
def setUpClass(cls):
|
||
|
|
super().setUpClass()
|
||
|
|
cls.selenium = WebDriver()
|
||
|
|
cls.selenium.implicitly_wait(10)
|
||
|
|
|
||
|
|
@classmethod
|
||
|
|
def tearDownClass(cls):
|
||
|
|
cls.selenium.quit()
|
||
|
|
super().tearDownClass()
|
||
|
|
|
||
|
|
def test_register_device(self):
|
||
|
|
# Open landing page
|
||
|
|
self.selenium.get(f"{self.live_server_url}/")
|
||
|
|
# Click on a register link
|
||
|
|
self.selenium.find_element(By.CLASS_NAME, "register_link").click()
|
||
|
|
time.sleep(1)
|
||
|
|
# Enter new device
|
||
|
|
# Enter guest mail address
|
||
|
|
mail = self.selenium.find_element(By.NAME, "mail")
|
||
|
|
mail.send_keys("guest@example.com")
|
||
|
|
# Enter device
|
||
|
|
device = self.selenium.find_element(By.NAME, "device")
|
||
|
|
device.send_keys("A Test Device")
|
||
|
|
# Enter manufacturer
|
||
|
|
manufacturer = self.selenium.find_element(By.NAME, "manufacturer")
|
||
|
|
manufacturer.send_keys("A Test Manufacturer")
|
||
|
|
# Enter a error description
|
||
|
|
error = self.selenium.find_element(By.NAME, "error")
|
||
|
|
error.send_keys("A description of the issue\nof the device.")
|
||
|
|
# Skip device picture and device type plate
|
||
|
|
# No follow up repair
|
||
|
|
# Accept repair conditions
|
||
|
|
self.selenium.find_element(By.NAME, "confirm_repair").click()
|
||
|
|
# Accept data protection notice
|
||
|
|
self.selenium.find_element(By.NAME, "confirm_data").click()
|
||
|
|
time.sleep(1)
|
||
|
|
# Send form
|
||
|
|
self.selenium.find_element(By.CLASS_NAME, 'submit_button').click()
|
||
|
|
time.sleep(1)
|
||
|
|
# Register new guest
|
||
|
|
# Enter guest name
|
||
|
|
name = self.selenium.find_element(By.NAME, "name")
|
||
|
|
name.send_keys("A Guest")
|
||
|
|
# Enter guest phone
|
||
|
|
phone = self.selenium.find_element(By.NAME, "phone")
|
||
|
|
phone.send_keys("0911 123 456")
|
||
|
|
# Enter guest residence
|
||
|
|
residence = self.selenium.find_element(By.NAME, "residence")
|
||
|
|
residence.send_keys("Musterstadt")
|
||
|
|
time.sleep(1)
|
||
|
|
# Send form
|
||
|
|
self.selenium.find_element(By.CLASS_NAME, 'submit_button').click()
|
||
|
|
time.sleep(1)
|
||
|
|
self.assertTrue("confirm" in self.selenium.current_url)
|
||
|
|
self.assertTrue("Anmeldung erfolgreich!" in self.selenium.page_source)
|
||
|
|
# Register second device
|
||
|
|
# Open landing page again
|
||
|
|
self.selenium.get(f"{self.live_server_url}/")
|
||
|
|
# Click on a register link
|
||
|
|
self.selenium.find_element(By.CLASS_NAME, "register_link").click()
|
||
|
|
time.sleep(1)
|
||
|
|
# Enter new device
|
||
|
|
# Enter guest mail address
|
||
|
|
mail = self.selenium.find_element(By.NAME, "mail")
|
||
|
|
mail.send_keys("guest@example.com")
|
||
|
|
# Enter device
|
||
|
|
device = self.selenium.find_element(By.NAME, "device")
|
||
|
|
device.send_keys("Another Test Device")
|
||
|
|
# Enter manufacturer
|
||
|
|
manufacturer = self.selenium.find_element(By.NAME, "manufacturer")
|
||
|
|
manufacturer.send_keys("Another Test Manufacturer")
|
||
|
|
# Enter a error description
|
||
|
|
error = self.selenium.find_element(By.NAME, "error")
|
||
|
|
error.send_keys("Another issue description.")
|
||
|
|
# Add device picture
|
||
|
|
test_script_folder = Path(__file__).resolve().parent
|
||
|
|
fixtures_folder = os.path.join(test_script_folder, "fixtures")
|
||
|
|
device_picture_file = os.path.join(fixtures_folder, "Hummingbird.jpg")
|
||
|
|
device_picture = self.selenium.find_element(By.NAME, "device_picture")
|
||
|
|
device_picture.send_keys(device_picture_file)
|
||
|
|
print(f"Using device picture {device_picture_file}")
|
||
|
|
# Add type plate picture
|
||
|
|
type_plate_picture_file = os.path.join(fixtures_folder, "Nut.jpg")
|
||
|
|
type_plate_picture = self.selenium.find_element(
|
||
|
|
By.NAME, "type_plate_picture")
|
||
|
|
type_plate_picture.send_keys(type_plate_picture_file)
|
||
|
|
print(f"Using type plate picture {type_plate_picture_file}")
|
||
|
|
# Select as follow up repair
|
||
|
|
self.selenium.find_element(By.NAME, "follow_up").click()
|
||
|
|
# Accept repair conditions
|
||
|
|
self.selenium.find_element(By.NAME, "confirm_repair").click()
|
||
|
|
# Accept data protection notice
|
||
|
|
self.selenium.find_element(By.NAME, "confirm_data").click()
|
||
|
|
time.sleep(1)
|
||
|
|
# Send form
|
||
|
|
self.selenium.find_element(By.CLASS_NAME, 'submit_button').click()
|
||
|
|
time.sleep(1)
|
||
|
|
# Guest is known, no guest registration needed.
|
||
|
|
self.assertTrue("confirm" in self.selenium.current_url)
|
||
|
|
self.assertTrue("Anmeldung erfolgreich!" in self.selenium.page_source)
|