Blame view

tests/frontend_tests.py 4.18 KB
c99e4b38   hitier   New frontend tests
1
2
3
import os
import urllib.request

264e5cfb   hitier   New agents and pr...
4
from flask import url_for
c99e4b38   hitier   New frontend tests
5
6
7
8
9
from flask_testing import LiveServerTestCase
from selenium import webdriver

from app import create_app
from pdc_config import TestConfig
264e5cfb   hitier   New agents and pr...
10
from tests.common_db_feed import resources_to_instancedb
c99e4b38   hitier   New frontend tests
11
12
13
14
15
16
17
18
19
20
21
22


class BaseFrontTestCase(LiveServerTestCase):
    def create_app(self):
        # # remove logging lines on test output
        import logging
        log = logging.getLogger('werkzeug')
        log.setLevel(logging.INFO)
        log.disabled = True
        os.environ['WERKZEUG_RUN_MAIN'] = 'true'

        # pass in test configurations
264e5cfb   hitier   New agents and pr...
23
24
25
        self.app = create_app(TestConfig)
        self.db_path = resources_to_instancedb(self.app)
        self.app.config.update(
c99e4b38   hitier   New frontend tests
26
27
28
29
30
31
            # Specify the test database as the default in_memory wont work for web tests
            SQLALCHEMY_DATABASE_URI='sqlite:///' + self.db_path,
            # Change the port that the liveserver listens on as we dont want to conflict with running:5000
            LIVESERVER_PORT=8943
        )

264e5cfb   hitier   New agents and pr...
32
        self.app_context = self.app.app_context()
c99e4b38   hitier   New frontend tests
33
        self.app_context.push()
264e5cfb   hitier   New agents and pr...
34
        return self.app
c99e4b38   hitier   New frontend tests
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90

    def setUp(self):
        self.driver = self.create_chrome_driver()
        # db.create_all()

    def tearDown(self):
        # fs_utils.clean_dirs()
        # db.session.remove()
        # db.drop_all()
        self.app_context.pop()
        if os.path.exists(self.db_path):
            os.remove(self.db_path)
        self.driver.close()
        self.driver.quit()

    # noinspection PyMethodMayBeStatic
    def is_in_docker(self):
        """
        Test if in docker.
        :return: True if running in docker, False otherwise.
        """
        if os.path.exists('/proc/self/cgroup'):
            with open('/proc/self/cgroup') as f:
                content = f.read()
                return '/docker/' in content
        return False

    def create_chrome_driver(self):
        """
        Create then return the chrome driver.

        :return: the chrome driver.
        """
        from selenium.webdriver.chrome.options import Options
        options = Options()
        options.add_argument('--headless')
        # options.add_argument('--log-level=3')
        # options.add_experimental_option('excludeSwitches', ['enable-logging'])

        if self.is_in_docker():
            options.add_argument("--no-sandbox")
        return webdriver.Chrome(options=options)


class AccessTestCase(BaseFrontTestCase):
    def test_ping(self):
        self.assertEqual("http://localhost:8943", self.get_server_url())

    def test_selenium_access(self):
        # On ouvre le navigateur avec l'adresse du serveur.
        self.driver.get(self.get_server_url())
        # L'adresse dans l'url doit ĂȘtre celle que l'on attend.
        self.assertEqual(self.driver.current_url, 'http://localhost:8943/')

    def test_server_is_up_and_running(self):
        response = urllib.request.urlopen(self.get_server_url())
264e5cfb   hitier   New agents and pr...
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
        self.assertEqual(response.code, 200)

    def test_agents_page(self):
        target_url = self.get_server_url() + url_for('main.agents')
        self.driver.get(target_url)
        self.assertEqual(self.driver.current_url, 'http://localhost:8943/agents')

    def test_agent_page(self):
        agent_id = 60
        target_url = self.get_server_url() + url_for('main.agent', agent_id=agent_id)
        self.driver.get(target_url)
        self.assertEqual(self.driver.current_url, f'http://localhost:8943/agent/{agent_id}')
        td_elmts = self.driver.find_elements_by_xpath("//table[@id='charge_table']/tbody/tr/td")
        self.assertEqual(260, len(td_elmts))

    def test_projects_page(self):
        target_url = self.get_server_url() + url_for('main.projects')
        self.driver.get(target_url)
        self.assertEqual(self.driver.current_url, 'http://localhost:8943/projects')

    def test_project_page(self):
        project_id = 8
        target_url = self.get_server_url() + url_for('main.project', project_id=project_id)
        self.driver.get(target_url)
        self.assertEqual(self.driver.current_url, f'http://localhost:8943/project/{project_id}')
        td_elmts = self.driver.find_elements_by_xpath("//table[@id='charge_table']/tbody/tr/td")
        self.assertEqual(1085, len(td_elmts))