diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 56573152..96cceeb9 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -18,6 +18,11 @@ jobs:
TEST_DATABASE: ${{ secrets.Test_Database }}
run: |
./run-docker.sh
+ - uses: actions/upload-artifact@v2
+ if: ${{ failure() }}
+ with:
+ name: robot_logs
+ path: ./end_to_end_tests/logs
- name: Stop End-to-End tests
env: # Env variable from Github Secrets
TEST_DATABASE: ${{ secrets.Test_Database }}
diff --git a/.gitignore b/.gitignore
index 156567c1..a31c3081 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,4 +13,6 @@ test/*
.vscode/
robot_test/logs/
*.env
-*.pyc
\ No newline at end of file
+*.pyc
+
+xeno
diff --git a/README.md b/README.md
index cef9cd99..815781a8 100644
--- a/README.md
+++ b/README.md
@@ -8,9 +8,9 @@ Epimetheus offers a dashboard/UI to visualize data from [TestArchiver](https://g
### Requirements
-1) PostgreSQL database with archived result data
-2) `Python v3+`
-3) `Node.js v10+`
+ 1. PostgreSQL database with archived result data
+ 2. `Python v3+`
+ 3. `Node.js v10+`
### Database
@@ -19,7 +19,7 @@ Currently the only supported database engine is PostgreSQL. It can be local or c
### Backend
If you have multiple python installations on your machine, remember to use the 'python3' postfix,
-also with pip you might need to use 'pip3' to make sure the requirements get installed with the right python.
+also with pip you might need to use 'pip3' to make sure the requirements get installed with the right python.
```
cd backend-server
diff --git a/backend_server/server.py b/backend_server/server.py
index f544374e..4f2f7228 100644
--- a/backend_server/server.py
+++ b/backend_server/server.py
@@ -16,7 +16,7 @@
def load_config_file(file_name):
with open(file_name, 'r') as file:
return json.load(file)
-
+VERSION_NUMBER = "1.0.0"
@register_swagger_model
class SeriesModel:
@@ -202,7 +202,7 @@ def __init__(self, database):
setup_swagger(handlers,
swagger_url="/data/doc",
description='Project repo at https://github.com/salabs/Epimetheus',
- api_version='0.3.0',
+ api_version=VERSION_NUMBER,
title='Epimetheus backend API')
tornado.web.Application.__init__(self, handlers, **settings)
diff --git a/backend_server/sql_queries.py b/backend_server/sql_queries.py
index 0d0a7040..31dd4200 100644
--- a/backend_server/sql_queries.py
+++ b/backend_server/sql_queries.py
@@ -172,7 +172,7 @@ def status_counts(series, start_from, last, offset=0):
count(nullif(status !~ '^FAIL', true)) as suites_failed,
count(nullif(status !~ '^SKIP', true)) as suites_skipped,
count(nullif(status ~ '^((SKIP)|(PASS)|(FAIL))', true)) as suites_other,
- build_start_time,
+ min(build_start_time) as build_start_time,
build_id,
build_number
FROM (
@@ -211,7 +211,7 @@ def status_counts(series, start_from, last, offset=0):
) AS status_per_test
GROUP BY suite_id, build_number, build_id
) AS status_per_suite
-GROUP BY build_number, build_id, build_start_time
+GROUP BY build_number, build_id
ORDER BY build_number DESC
""".format(series=int(series), # nosec
test_run_ids=test_run_ids(series, start_from=start_from, last=last, offset=offset))
diff --git a/docker-compose-robot-tests.yml b/docker-compose-robot-tests.yml
index 70d83410..b033885b 100644
--- a/docker-compose-robot-tests.yml
+++ b/docker-compose-robot-tests.yml
@@ -48,6 +48,15 @@ services:
dockerfile: ./resources/Dockerfile
env_file:
- ${ENV_FILE}
+ environment:
+ CI_PIPELINE_ID: ${GITHUB_WORKFLOW}
+ CI_COMMIT_REF_NAME: ${GITHUB_HEAD_REF}
+ CI_COMMIT_SHA: ${GITHUB_SHA}
+ CI_REPOSITORY: ${GITHUB_REPOSITORY}
+ CI_RUN_NUMBER: ${GITHUB_RUN_NUMBER}
+ CI_RUN_ID: ${GITHUB_RUN_ID}
+ CI_USERNAME: ${GITHUB_ACTOR}
+ CI_EVENT_NAME: ${GITHUB_EVENT_NAME}
volumes:
- ./end_to_end_tests/logs:/home/robot/test/logs
depends_on:
diff --git a/end_to_end_tests/resources/Dockerfile b/end_to_end_tests/resources/Dockerfile
index 1848262e..6bf750d5 100644
--- a/end_to_end_tests/resources/Dockerfile
+++ b/end_to_end_tests/resources/Dockerfile
@@ -13,7 +13,7 @@ ADD variables.py .
RUN pip install -r requirements.txt
-RUN pip install -i https://test.pypi.org/simple/ testarchiver==0.0.4
+RUN pip install testarchiver==2.0.0
RUN chown -R robot:robot /home/robot
RUN mkdir /home/robot/test/logs
diff --git a/end_to_end_tests/resources/Libraries/Helper.py b/end_to_end_tests/resources/Libraries/Helper.py
index 82685bd1..ef31ba86 100644
--- a/end_to_end_tests/resources/Libraries/Helper.py
+++ b/end_to_end_tests/resources/Libraries/Helper.py
@@ -60,3 +60,18 @@ def set_number(self, number):
@keyword
def get_number(self):
return self.value
+
+ @keyword
+ def get_build_info(self, series, build):
+ r = requests.get(self.host+"data/series/" + series + "/builds/" + build + "/info?")
+ return r.json()["series"]
+
+ @staticmethod
+ @keyword
+ def get_team_from_info(info):
+ return(info["team"])
+
+ @staticmethod
+ @keyword
+ def get_series_from_info(info):
+ return(info["name"])
\ No newline at end of file
diff --git a/end_to_end_tests/resources/general_keywords/breadcrumbs.robot b/end_to_end_tests/resources/general_keywords/breadcrumbs.robot
new file mode 100644
index 00000000..f9bcda96
--- /dev/null
+++ b/end_to_end_tests/resources/general_keywords/breadcrumbs.robot
@@ -0,0 +1,77 @@
+***Settings***
+Resource ../resource.robot
+
+*** Keywords ***
+
+Navigate to series overview page using breadcrumbs
+ Wait Until Element is Enabled ${series_breadcrumb}
+ Click Element ${series_breadcrumb}
+
+Navigate to team page using breadcrumbs
+ Wait Until Element is Enabled ${team_breadcrumb}
+ Click Element ${team_breadcrumb}
+
+Navigate to build overview page using breadcrumbs
+ Wait Until Element is Enabled ${build_breadcrumb}
+ Click Element ${build_breadcrumb}
+
+Team page breadcrumb should contain correct value
+ [Arguments] ${team}
+ Wait Until Element Is Enabled ${team_breadcrumb}
+ Wait Until Element Does Not Contain ${team_breadcrumb} ''
+ Element Should Contain ${team_breadcrumb} ${team}
+
+Series page breadcrumbs should contain correct values
+ [Arguments] ${series} ${team}
+ Wait Until Element Is Enabled ${series_breadcrumb}
+ Team page breadcrumb should contain correct value ${team}
+ Element Should Contain ${series_breadcrumb} ${series}
+
+Build page breadcrumbs should contain correct values
+ [Arguments] ${build} ${series} ${team}
+ Wait Until Element Is Enabled ${build_breadcrumb}
+ Series page breadcrumbs should contain correct values ${series} ${team}
+ Element Should Contain ${build_breadcrumb} ${build}
+
+Suite page breadcrumbs should contain correct values
+ [Arguments] ${suite} ${build} ${series} ${team}
+ Wait Until Element Is Enabled ${suite_breadcrumb}
+ Build page breadcrumbs should contain correct values ${build} ${series} ${team}
+ Element Should Contain ${suite_breadcrumb} ${suite}
+
+Series overview page should be of stored series
+ [Arguments] ${series}
+ Wait Until Element Is Enabled ${timeline_locator}
+ Element Should Contain ${siteHeader} ${series}
+ Element Should Contain ${series_breadcrumb} ${series}
+
+Build overview page should be of stored build
+ [Arguments] ${build}
+ Wait Until Element Is Enabled ${buildOverviewContainer}
+ Element Should Contain ${build_identifier} ${build}
+ Element Should Contain ${siteHeader} ${build}
+ Element Should contain ${build_breadcrumb} ${build}
+
+Team page should be of stored team
+ [Arguments] ${team}
+ Location should contain ${team}
+
+Store team and series of series history page
+ Wait Until Element Is Enabled ${lastRunInfo}
+ ${temp_stored_team}= Get Text ${team_identifier}
+ ${temp_stored_series}= Get Text ${series_identifier}
+
+ Set Suite Variable ${stored_team} ${temp_stored_team}
+ Set Suite Variable ${stored_series} ${temp_stored_series}
+
+Store the team, series and build of build page
+ Store team and series of series history page
+ Wait Until Element Is Enabled ${lastRunInfo}
+ ${temp_stored_build}= Get Text ${build_identifier}
+ Set Suite Variable ${stored_build} ${temp_stored_build}
+
+Store the team, series, build and suite of a suite page
+ Wait Until Element Is Enabled ${suite_id_locator}
+ Store the team, series and build of build page
+ ${temp_stored_suite}= Get Text ${suite_id_locator}
+ Set Suite Variable ${stored_suite} ${temp_stored_suite}
\ No newline at end of file
diff --git a/end_to_end_tests/resources/general_keywords/navigation.robot b/end_to_end_tests/resources/general_keywords/navigation.robot
index 15a3d54a..4bee696e 100644
--- a/end_to_end_tests/resources/general_keywords/navigation.robot
+++ b/end_to_end_tests/resources/general_keywords/navigation.robot
@@ -1,16 +1,77 @@
*** Keywords ***
-Current Page Is
+Current Page Is
[Arguments] ${url}
Go To ${url}
Page contains id
[Arguments] ${id}
- Element should be Enabled ${id}
-
-Id contains
- [Arguments] ${id} ${1} ${2} ${3}
- Element Should Contain ${id} ${1}
- Element Should Contain ${id} ${2}
- Element Should Contain ${id} ${3}
- ${page} = Log Location
\ No newline at end of file
+ Element should be Enabled ${id}
+
+Open Team Page
+ Go To url=${team_url}
+
+
+Open Index Page
+ Go To url=${URL}
+
+Open Series Page of Team
+ [Arguments] ${team}
+ ${url} = Catenate SEPARATOR= ${team_url} ${team}
+ Go To ${url}
+
+Open a build
+ [Arguments] ${series} ${build}
+ ${str}= Catenate SEPARATOR= ${url} series/ ${series} /build/ ${build} /history
+ Set Suite Variable ${navigated_series} ${series}
+ Set Suite Variable ${navigated_build} ${build}
+ Go To ${str}
+ Wait Until Element is Enabled ${lastRunInfo}
+
+
+Open history page of series
+ [Arguments] ${series}
+ ${str}= Catenate SEPARATOR= ${history_url} ${series} /history
+ Current Page Is url=${str}
+ ${url}= Get Location
+ Set Suite Variable ${navigated_series} ${series}
+ Should be equal as Strings ${url} ${str}
+ Wait Until Element is Enabled ${lastRunInfo}
+
+
+Open overview page of series
+ [Arguments] ${series}
+ ${str}= Catenate SEPARATOR= ${history_url} ${series} /overview
+ Current Page Is url=${str}
+ ${url}= Get Location
+ Set Suite Variable ${navigated_series} ${series}
+ Should be equal as Strings ${url} ${str}
+ Wait Until Element is Enabled ${timeline_locator}
+
+
+Open overview page of build
+ [Arguments] ${series} ${build}
+ ${url}= Catenate SEPARATOR= ${url} series/ ${series} /build/ ${build} /overview
+ Set Suite Variable ${navigated_series} ${series}
+ Set Suite Variable ${navigated_build} ${build}
+ Go To ${url}
+ Wait Until Element is Enabled ${buildOverviewContainer}
+
+Open a suite
+ [Arguments] ${series} ${build} ${suite}
+ ${url}= Catenate SEPARATOR= ${url} series/ ${series} /build/ ${build} /suite/ ${suite} /history
+ Set Suite Variable ${navigated_series} ${series}
+ Set Suite Variable ${navigated_build} ${build}
+ Set Suite Variable ${navigated_suite} ${suite}
+ Go To ${url}
+ Wait Until Element is Enabled ${lastRunInfo}
+
+
+Navigate to first suite of build
+ [Arguments] ${series} ${build}
+ ${url}= Catenate SEPARATOR= ${url} series/ ${series} /build/ ${build} /history
+ Go To ${url}
+ Wait Until Element is Enabled ${first_suite}
+ Click Element ${first_suite}
+ Wait Until Element is Enabled ${suite_id_locator}
+ Wait Until Element is Enabled ${lastRunInfo}
diff --git a/end_to_end_tests/resources/page_locators/build_overview.robot b/end_to_end_tests/resources/page_locators/build_overview.robot
new file mode 100644
index 00000000..23ee2818
--- /dev/null
+++ b/end_to_end_tests/resources/page_locators/build_overview.robot
@@ -0,0 +1,2 @@
+***Variables***
+${buildOverviewContainer} //*[@id="buildGraphDiv"]
\ No newline at end of file
diff --git a/end_to_end_tests/resources/page_locators/build_page.robot b/end_to_end_tests/resources/page_locators/build_page.robot
index 1afc15e6..b117d971 100644
--- a/end_to_end_tests/resources/page_locators/build_page.robot
+++ b/end_to_end_tests/resources/page_locators/build_page.robot
@@ -1,10 +1,11 @@
***Variables***
-${fail_checkbox_locator} //*[@id="last-run-checkbox-container"]/label[1]/input
-${pass_checkbox_locator} //*[@id="last-run-checkbox-container"]/label[2]/input
-${table_locator} //*[@id="last-run-table"]/tbody
-${table_row_locator} //*[@id="last-run-table"]/tbody/tr
+${fail_checkbox_locator} xpath://*[@id="last-run-checkbox-container"]/label[1]/span
+${pass_checkbox_locator} xpath://*[@id="last-run-checkbox-container"]/label[2]/span
+${table_locator} xpath://*[@id="last-run-table"]/tbody
+${table_row_locator} xpath://*[@id="last-run-table"]/tbody/tr
+${pass_span} xpath://*[@id="last-run-table"]/tbody/tr[*]/td[*]/span[text()='Pass']
+${fail_span} xpath://*[@id="last-run-table"]/tbody/tr[*]/td[*]/span[text()='Fail']
+${last_run_table} xpath://*[@id="last-run-table"]
-${pass_span} //*[@id="last-run-table"]/tbody/tr[*]/td[*]/span[text()='Pass']
-${fail_span} //*[@id="last-run-table"]/tbody/tr[*]/td[*]/span[text()='Fail']
-${last_run_table} //*[@id="last-run-table"]
+${first_suite} xpath://*[@id="last-run-table"]/tbody/tr[1]/td[1]/a
diff --git a/end_to_end_tests/resources/page_locators/help_page.robot b/end_to_end_tests/resources/page_locators/help_page.robot
index e13cca65..1ec36e55 100644
--- a/end_to_end_tests/resources/page_locators/help_page.robot
+++ b/end_to_end_tests/resources/page_locators/help_page.robot
@@ -1,2 +1,2 @@
***Variables***
-${HELP_PAGE_WELCOME_ELEMENT} //*[@id="frontpage"]/h1
\ No newline at end of file
+${HELP_PAGE_WELCOME_ELEMENT} xpath://*[@id="frontpage"]/h1
\ No newline at end of file
diff --git a/end_to_end_tests/resources/page_locators/history_page.robot b/end_to_end_tests/resources/page_locators/history_page.robot
index fd96cb71..6410dbc0 100644
--- a/end_to_end_tests/resources/page_locators/history_page.robot
+++ b/end_to_end_tests/resources/page_locators/history_page.robot
@@ -1,2 +1,22 @@
***Variables***
-${table_header_xpath} //*[@id="history-table-head"]/tr/th
\ No newline at end of file
+${table_header_xpath} xpath://*[@id="history-table-head"]/tr/th
+${series_history_dropdown} xpath://*[@id="build_amount_dropdown"]
+
+${history_build_selector_5} xpath://*[@id="react-select-2-option-0"]
+${history_build_selector_10} xpath://*[@id="react-select-2-option-1"]
+${history_build_selector_15} xpath://*[@id="react-select-2-option-2"]
+${history_build_selector_30} xpath://*[@id="react-select-2-option-3"]
+
+
+${offset_latest} xpath://*[@id="latest_offset_button"]
+${offset_field} xpath://*[@id="offset_field"]
+${offset_left} xpath://*[@id="left_offset_button"]
+${offset_right} xpath://*[@id="right_offset_button"]
+${series_history_most_recent} //*[@id="history-table-head"]/tr/th[3]/a
+${series_history_second_recent} //*[@id="history-table-head"]/tr/th[4]/a
+${series_history_third_recent} //*[@id="history-table-head"]/tr/th[5]/a
+
+${enabled_offset_right} xpath://*[contains(@class, 'rightfalse')]
+${enabled_offset_left} xpath://*[contains(@class, 'leftfalse')]
+${disabled_offset_right} xpath://*[contains(@class, 'rightrue')]
+${disabled_offset_left} xpath://*[contains(@class, 'leftrue')]
\ No newline at end of file
diff --git a/end_to_end_tests/resources/page_locators/nav_bar.robot b/end_to_end_tests/resources/page_locators/nav_bar.robot
index ec81bb10..ca801417 100644
--- a/end_to_end_tests/resources/page_locators/nav_bar.robot
+++ b/end_to_end_tests/resources/page_locators/nav_bar.robot
@@ -1,4 +1,8 @@
***Variables***
-${NAV_HOMEPAGE} xpath://*[@id="main-nav"]/ul/li[1]/a
-${NAV_HISTORY} xpath://*[@id="main-nav"]/ul/li[2]/a
-${NAV_GITHUB} xpath://*[@id="main-nav"]/ul/li[3]/a
\ No newline at end of file
+${NAV_HOMEPAGE} xpath://*[@id="main-nav"]/div/a[1]
+${NAV_TEAM} xpath://*[@id="main-nav"]/div/a[2]
+${NAV_GITHUB} xpath://*[@id="main-nav"]/div/a[3]
+
+
+${INNER_HISTORY} xpath://*[@id="main-nav"]/ul/div/li[1]/a
+${INNER_DASHBOARD} xpath://*[@id="main-nav"]/ul/div/li[2]/a
diff --git a/end_to_end_tests/resources/page_locators/overview.robot b/end_to_end_tests/resources/page_locators/overview.robot
new file mode 100644
index 00000000..f4fa4ff7
--- /dev/null
+++ b/end_to_end_tests/resources/page_locators/overview.robot
@@ -0,0 +1,3 @@
+***Variables***
+${timeline_locator} xpath://*[@id="timeLineContainer"]
+${siteHeader} xpath://*[@id="siteHeader"]
\ No newline at end of file
diff --git a/end_to_end_tests/resources/page_locators/series_page.robot b/end_to_end_tests/resources/page_locators/series_page.robot
index 600d962d..7aadc352 100644
--- a/end_to_end_tests/resources/page_locators/series_page.robot
+++ b/end_to_end_tests/resources/page_locators/series_page.robot
@@ -1,2 +1,5 @@
-***Variable***
-${series_xpath} //*[@id="selectedTeam"]/div[2]/div[1]/div[2]/div[1]/h4
\ No newline at end of file
+***Variables***
+${series_xpath} xpath://*[@id="selectedTeam"]/div[2]/div[1]/div[2]/div[1]/h4
+${series_list} xpath://*[@id="selectedTeam"]/div[2]/div[*]
+${team_breadcrumb} xpath://*[@id="TeamBreadCrumb"]
+${series_click_elements} xpath://*[@id="selectedTeam"]/div[2]/div[*]/div[2]/div[1]
\ No newline at end of file
diff --git a/end_to_end_tests/resources/page_locators/shared_resources.robot b/end_to_end_tests/resources/page_locators/shared_resources.robot
new file mode 100644
index 00000000..d4cefb62
--- /dev/null
+++ b/end_to_end_tests/resources/page_locators/shared_resources.robot
@@ -0,0 +1,9 @@
+***Variables**
+${team_breadcrumb} xpath://*[@id="TeamBreadCrumb"]
+${series_breadcrumb} xpath://*[@id="SeriesBreadCrumb"]
+${build_breadcrumb} xpath://*[@id="BuildBreadCrumb"]
+
+${team_identifier} xpath://*[@id="lastRunInfo"]/p[1]/span[2]
+${series_identifier} xpath://*[@id="lastRunInfo"]/p[2]/span[2]
+${build_identifier} xpath://*[@id="lastRunInfo"]/p[3]/span[2]
+${lastRunInfo} xpath://*[@id="lastRunInfo"]/p
\ No newline at end of file
diff --git a/end_to_end_tests/resources/page_locators/suite_page.robot b/end_to_end_tests/resources/page_locators/suite_page.robot
new file mode 100644
index 00000000..ae1c9caf
--- /dev/null
+++ b/end_to_end_tests/resources/page_locators/suite_page.robot
@@ -0,0 +1,3 @@
+***Variables***
+${suite_breadcrumb} xpath://*[@id="SuiteBreadCrumb"]
+${suite_id_locator} xpath://*[@id="datatable"]/div[2]/span[2]
diff --git a/end_to_end_tests/resources/page_locators/team_page.robot b/end_to_end_tests/resources/page_locators/team_page.robot
index 2b39a9b1..7428210f 100644
--- a/end_to_end_tests/resources/page_locators/team_page.robot
+++ b/end_to_end_tests/resources/page_locators/team_page.robot
@@ -1,3 +1,3 @@
***Variables***
-${team_xpath} //*[@id="team"]/div/div/h3
-${teams_xpath} //*[@id="team"]/div/div
\ No newline at end of file
+${team_xpath} xpath://*[@id="team"]/div/div/h3
+${teams_xpath} xpath://*[@id="team"]/div/div[*]
diff --git a/end_to_end_tests/resources/resource.robot b/end_to_end_tests/resources/resource.robot
index bb4a58e6..c0efe425 100644
--- a/end_to_end_tests/resources/resource.robot
+++ b/end_to_end_tests/resources/resource.robot
@@ -7,5 +7,10 @@ Resource page_locators/help_page.robot
Resource page_locators/series_page.robot
Resource page_locators/team_page.robot
Resource page_locators/build_page.robot
+Resource page_locators/overview.robot
+Resource page_locators/build_overview.robot
+Resource page_locators/suite_page.robot
+Resource page_locators/shared_resources.robot
Resource general_keywords/initialisation_keywords.robot
Resource general_keywords/navigation.robot
+Resource general_keywords/breadcrumbs.robot
diff --git a/end_to_end_tests/robot_tests/__init__.robot b/end_to_end_tests/robot_tests/__init__.robot
index 2a7abaef..44a677e0 100644
--- a/end_to_end_tests/robot_tests/__init__.robot
+++ b/end_to_end_tests/robot_tests/__init__.robot
@@ -1,5 +1,5 @@
*** Settings ***
-Resource ${EXECDIR}${/}resources${/}resource.robot
+Resource ${EXECDIR}/resources/resource.robot
Suite Setup Open Browser To Epimetheus Landing Page ${BROWSER} ${remote_url}
Suite Teardown Custom Teardown
diff --git a/end_to_end_tests/robot_tests/backend/api/__init__.robot b/end_to_end_tests/robot_tests/backend/api/__init__.robot
new file mode 100644
index 00000000..de5657f7
--- /dev/null
+++ b/end_to_end_tests/robot_tests/backend/api/__init__.robot
@@ -0,0 +1,3 @@
+
+***Settings***
+Force Tags Backend
diff --git a/end_to_end_tests/robot_tests/frontend/__init__.robot b/end_to_end_tests/robot_tests/frontend/__init__.robot
new file mode 100644
index 00000000..7f4a3046
--- /dev/null
+++ b/end_to_end_tests/robot_tests/frontend/__init__.robot
@@ -0,0 +1,3 @@
+
+***Settings***
+Force Tags Frontend
diff --git a/end_to_end_tests/robot_tests/frontend/build_overview_tests/__init__.robot b/end_to_end_tests/robot_tests/frontend/build_overview_tests/__init__.robot
new file mode 100644
index 00000000..6f16bd6c
--- /dev/null
+++ b/end_to_end_tests/robot_tests/frontend/build_overview_tests/__init__.robot
@@ -0,0 +1,3 @@
+*** Settings ***
+
+Force Tags BuildOverview
\ No newline at end of file
diff --git a/end_to_end_tests/robot_tests/frontend/build_overview_tests/build_overview_breadcrums.robot b/end_to_end_tests/robot_tests/frontend/build_overview_tests/build_overview_breadcrums.robot
new file mode 100644
index 00000000..8321b68a
--- /dev/null
+++ b/end_to_end_tests/robot_tests/frontend/build_overview_tests/build_overview_breadcrums.robot
@@ -0,0 +1,16 @@
+***Settings***
+Resource ../../../resources/resource.robot
+
+*** Test Cases ***
+
+Verify Build Overview Breadcrumbs
+ Open overview page of build 1 1
+ Store the team, series and build of build page
+ Build page breadcrumbs should contain correct values ${stored_build} ${stored_series} ${stored_team}
+ Navigate to series overview page using breadcrumbs
+ Series overview page should be of stored series ${stored_series}
+ Series page breadcrumbs should contain correct values ${stored_series} ${stored_team}
+ Open overview page of build 1 1
+ Navigate to team page using breadcrumbs
+ Team page should be of stored team ${stored_team}
+ Team page breadcrumb should contain correct value ${stored_team}
\ No newline at end of file
diff --git a/end_to_end_tests/robot_tests/build_page_tests/Clickboxes.robot b/end_to_end_tests/robot_tests/frontend/build_page_tests/Clickboxes.robot
similarity index 80%
rename from end_to_end_tests/robot_tests/build_page_tests/Clickboxes.robot
rename to end_to_end_tests/robot_tests/frontend/build_page_tests/Clickboxes.robot
index 7ec60254..fcc5083e 100644
--- a/end_to_end_tests/robot_tests/build_page_tests/Clickboxes.robot
+++ b/end_to_end_tests/robot_tests/frontend/build_page_tests/Clickboxes.robot
@@ -1,5 +1,5 @@
***Settings***
-Resource ../../resources/resource.robot
+Resource ../../../resources/resource.robot
*** Test Cases ***
@@ -17,17 +17,11 @@ Test CheckBoxes
*** Keywords ***
-Open a build
- [Arguments] ${series} ${build}
- ${str}= Catenate SEPARATOR= ${url} series/ ${series} /build/ ${build} /history
- Go To ${str}
-
Hide Tests
[Arguments] ${status}
${path}= Set Variable If '${status}' == 'Failing' ${fail_checkbox_locator} ${pass_checkbox_locator}
Wait Until Element Is Enabled ${fail_checkbox_locator}
- Checkbox Should Not Be Selected ${Path}
- Select Checkbox ${path}
+ Click Element ${path}
Build Should have test executions
Wait Until Element Is Enabled ${last_run_table}
@@ -40,8 +34,7 @@ Show Tests
[Arguments] ${status}
${path}= Set Variable If '${status}' == 'Failing' ${fail_checkbox_locator} ${pass_checkbox_locator}
Wait Until Element Is Enabled ${fail_checkbox_locator}
- Checkbox Should Be Selected ${path}
- Unselect Checkbox ${path}
+ Click Element ${path}
The status of all tests should be
[Arguments] ${status}
diff --git a/end_to_end_tests/robot_tests/frontend/build_page_tests/__init__.robot b/end_to_end_tests/robot_tests/frontend/build_page_tests/__init__.robot
new file mode 100644
index 00000000..c73a6f8f
--- /dev/null
+++ b/end_to_end_tests/robot_tests/frontend/build_page_tests/__init__.robot
@@ -0,0 +1,3 @@
+*** Settings ***
+
+Force Tags Build
\ No newline at end of file
diff --git a/end_to_end_tests/robot_tests/frontend/build_page_tests/build_page_breadcrumbs.robot b/end_to_end_tests/robot_tests/frontend/build_page_tests/build_page_breadcrumbs.robot
new file mode 100644
index 00000000..9c757eb8
--- /dev/null
+++ b/end_to_end_tests/robot_tests/frontend/build_page_tests/build_page_breadcrumbs.robot
@@ -0,0 +1,16 @@
+***Settings***
+Resource ../../../resources/resource.robot
+
+*** Test Cases ***
+
+Test Build History Breadcrumbs
+ Open a build 1 1
+ Store the team, series and build of build page
+ Build page breadcrumbs should contain correct values ${stored_build} ${stored_series} ${stored_team}
+ Navigate to series overview page using breadcrumbs
+ Series overview page should be of stored series ${stored_series}
+ Series page breadcrumbs should contain correct values ${stored_series} ${stored_team}
+ Open a build 1 1
+ Navigate to team page using breadcrumbs
+ Team page should be of stored team ${stored_team}
+ Team page breadcrumb should contain correct value ${stored_team}
diff --git a/end_to_end_tests/robot_tests/frontend/help_page_tests/__init__.robot b/end_to_end_tests/robot_tests/frontend/help_page_tests/__init__.robot
new file mode 100644
index 00000000..b9517d5f
--- /dev/null
+++ b/end_to_end_tests/robot_tests/frontend/help_page_tests/__init__.robot
@@ -0,0 +1,3 @@
+*** Settings ***
+
+Force Tags Help
\ No newline at end of file
diff --git a/end_to_end_tests/robot_tests/frontend/history_page_tests/__init__.robot b/end_to_end_tests/robot_tests/frontend/history_page_tests/__init__.robot
new file mode 100644
index 00000000..56223875
--- /dev/null
+++ b/end_to_end_tests/robot_tests/frontend/history_page_tests/__init__.robot
@@ -0,0 +1,3 @@
+*** Settings ***
+
+Force Tags History
\ No newline at end of file
diff --git a/end_to_end_tests/robot_tests/frontend/history_page_tests/history_page_breadcrumbs.robot b/end_to_end_tests/robot_tests/frontend/history_page_tests/history_page_breadcrumbs.robot
new file mode 100644
index 00000000..d93cc491
--- /dev/null
+++ b/end_to_end_tests/robot_tests/frontend/history_page_tests/history_page_breadcrumbs.robot
@@ -0,0 +1,12 @@
+***Settings***
+Resource ../../../resources/resource.robot
+
+*** Test Cases ***
+
+Test Series History Breadcrumbs
+ Open history page of series 1
+ Store team and series of series history page
+ Series page breadcrumbs should contain correct values ${stored_series} ${stored_team}
+ Navigate to team page using breadcrumbs
+ Team page should be of stored team ${stored_team}
+ Team page breadcrumb should contain correct value ${stored_team}
\ No newline at end of file
diff --git a/end_to_end_tests/robot_tests/frontend/history_page_tests/test_buttons.robot b/end_to_end_tests/robot_tests/frontend/history_page_tests/test_buttons.robot
new file mode 100644
index 00000000..648457fc
--- /dev/null
+++ b/end_to_end_tests/robot_tests/frontend/history_page_tests/test_buttons.robot
@@ -0,0 +1,123 @@
+***Settings***
+
+Resource ../../../resources/resource.robot
+
+*** Test Cases ***
+
+Test Build Amount Dropdown
+ Open history page of series 3
+ Select From Dropdown ${history_build_selector_5}
+ Table should be limited to number=5
+ Select From Dropdown ${history_build_selector_10}
+ Table should be limited to number=10
+ Select From Dropdown ${history_build_selector_30}
+ Table should be limited to number=30
+
+Test Offset Functionality
+ Open history page of series 3
+ Store Most Recent Builds
+ Offset should be 0
+ Most Recent Build Number should be ${most_recent_build}
+ Set Offset field to 1000
+ Left Button Should be disabled
+ Right Button Should be disabled
+ Set Offset field to 1
+ Right Button Should be enabled
+ Click Right Button
+ Offset should be 1
+ Most Recent Build Number should be ${second_recent_build}
+ Click Right Button
+ Offset should be 2
+ Most Recent Build Number should be ${third_recent_build}
+ Set Offset field to 1
+ Left Button Should be enabled
+ Click Left Button
+ Offset should be 1
+ Most Recent Build Number should be ${second_recent_build}
+ Left Button Should be enabled
+ Click Left Button
+ Offset should be 0
+ Most Recent Build Number should be ${most_recent_build}
+
+#Test Offset Functionality with Offset URL, to be added
+
+*** Keywords ***
+
+Select From Dropdown
+ [Arguments] ${dropdown_option}
+ Wait Until Element Is Enabled ${series_history_dropdown}
+ Click Element ${series_history_dropdown}
+ Wait Until Element Is Visible ${dropdown_option}
+ Click Element ${dropdown_option}
+
+Browser is on a history page of series
+ [Arguments] ${series}
+ ${str}= Catenate SEPARATOR= ${history_url} ${series} /history
+ Current Page Is url=${str}
+ ${url}= Get Location
+ Should be equal as Strings ${url} ${str}
+
+Table should be limited to
+ [Arguments] ${number}
+ Wait Until Element Is Enabled ${table_header_xpath}
+ ${elements} = Get Element Count ${table_header_xpath}
+ ${sum} = Evaluate ${number} + 2
+ Should be True ${sum}>=${elements}
+
+Store Most Recent Builds
+ Wait Until Element Is Enabled ${series_history_most_recent}
+ ${temp_most_recent}= Get Text ${series_history_most_recent}
+ ${temp_second_recent}= Get Text ${series_history_second_recent}
+ ${temp_third_recent}= Get Text ${series_history_third_recent}
+
+ Set Suite Variable ${most_recent_build} ${temp_most_recent}
+ Set Suite Variable ${second_recent_build} ${temp_second_recent}
+ Set Suite Variable ${third_recent_build} ${temp_third_recent}
+
+Most Recent Build Number should be
+ [Arguments] ${build}
+ Wait Until Element Is Enabled ${series_history_most_recent}
+ ${temp_most_recent}= Get Text ${series_history_most_recent}
+
+ Should be equal as Strings ${build} ${temp_most_recent}
+
+Set Offset field to
+ [Arguments] ${text}
+ Input Text ${offset_field} ${text}
+
+Offset should be
+ [Arguments] ${value}
+ ${url}= Get Location
+ Run Keyword if 'offset' in "${url}" Check offset url ${value}
+
+Check offset url
+ [Arguments] ${value}
+ ${url}= Get Location
+ ${full_string}= Catenate SEPARATOR= offset = ${value}
+ Should Contain ${url} ${full_string}
+
+Left Button Should be disabled
+ Wait Until Element Is Visible ${offset_left}
+ ${count}= Get Element Count ${disabled_offset_left}
+ Should be equal as Integers ${count} 0
+
+Left Button Should be enabled
+ Wait Until Element Is Enabled ${offset_left}
+ ${count}= Get Element Count ${enabled_offset_left}
+ Should be equal as Integers ${count} 1
+
+Right Button Should be enabled
+ Wait Until Element Is Enabled ${offset_right}
+ ${count}= Get Element Count ${enabled_offset_right}
+ Should be equal as Integers ${count} 1
+
+Right Button Should be disabled
+ Wait Until Element Is Visible ${offset_right}
+ ${count}= Get Element Count ${disabled_offset_right}
+ Should be equal as Integers ${count} 0
+
+Click Right Button
+ Click Element ${offset_right}
+Click Left Button
+ Click Element ${offset_left}
+
diff --git a/end_to_end_tests/robot_tests/history_page_tests/url_navigation.robot b/end_to_end_tests/robot_tests/frontend/history_page_tests/url_navigation.robot
similarity index 63%
rename from end_to_end_tests/robot_tests/history_page_tests/url_navigation.robot
rename to end_to_end_tests/robot_tests/frontend/history_page_tests/url_navigation.robot
index 81ad32b1..b54bd78d 100644
--- a/end_to_end_tests/robot_tests/history_page_tests/url_navigation.robot
+++ b/end_to_end_tests/robot_tests/frontend/history_page_tests/url_navigation.robot
@@ -1,5 +1,6 @@
***Settings***
-Resource ../../resources/resource.robot
+
+Resource ../../../resources/resource.robot
***Test Cases***
@@ -7,5 +8,5 @@ Test Url Navigation
Current Page Is url=${URL}
Wait Until Page Contains Epimetheus
Wait Until Element Contains ${HELP_PAGE_WELCOME_ELEMENT} Welcome
- Click Element ${NAV_HISTORY}
+ Click Element ${NAV_TEAM}
diff --git a/end_to_end_tests/robot_tests/frontend/navbar_tests/__init__.robot b/end_to_end_tests/robot_tests/frontend/navbar_tests/__init__.robot
new file mode 100644
index 00000000..67cd8dcd
--- /dev/null
+++ b/end_to_end_tests/robot_tests/frontend/navbar_tests/__init__.robot
@@ -0,0 +1,3 @@
+*** Settings ***
+
+Force Tags NavBar
\ No newline at end of file
diff --git a/end_to_end_tests/robot_tests/frontend/navbar_tests/navbar.robot b/end_to_end_tests/robot_tests/frontend/navbar_tests/navbar.robot
new file mode 100644
index 00000000..530e6745
--- /dev/null
+++ b/end_to_end_tests/robot_tests/frontend/navbar_tests/navbar.robot
@@ -0,0 +1,110 @@
+***Settings***
+
+Resource ../../../resources/resource.robot
+Library Collections
+
+***Variable***
+
+${nav_id}= 'main-nav'
+@{default_nav} About Teams GitHub
+@{inner_nav} History Dashboard
+
+***Test Cases***
+
+Test NavBar Links from index
+ Current Page Is url=${URL}
+ ${url}= Get Location
+ Test Page without Inner Nav ${url}
+
+Test Navbar Links From Team Page
+ Open Team Page
+ ${url}= Get Location
+ Test Page without Inner Nav ${url}
+
+Test Navbar Links From Series Page
+ Open Series Page of Team Epimetheus
+ ${url}= Get Location
+ Test Page without Inner Nav ${url}
+
+Test Navbar Links From History Page
+ Open history page of series 3
+ ${url}= Get Location
+ Test Page without Inner Nav ${url}
+
+Test Navbar Links From Build Page
+ Open a build 1 1
+ ${url}= Get Location
+ Test Page without Inner Nav ${url}
+
+Test Navbar links From Dashboard Page
+ Open overview page of series 3
+ ${url}= Get Location
+ Test Page without Inner Nav ${url}
+
+*** Keywords ***
+
+Test page with inner nav
+ [Arguments] ${return_url}
+ Current Page is ${return_url}
+ Element should be visible ${nav_id}
+ Default navbar contains ${default_nav}
+ Inner navbar contains ${inner_nav}
+
+ Test Dashboard Nav Link
+ Current Page is ${return_url}
+
+ Test History Nav Link
+ Current Page is ${return_url}
+
+ Test Team Nav Link
+ Current Page is ${return_url}
+
+ Test Help Nav Link
+
+Test page without inner nav
+ [Arguments] ${return_url}
+ Current Page is ${return_url}
+ Element should be visible ${nav_id}
+ Default navbar contains ${default_nav}
+
+ Test Team Nav Link
+ Current Page Is ${return_url}
+ Test Team Nav Link
+
+Test Team Nav Link
+ Click Link ${NAV_TEAM}
+ Current Page Is url=${team_url}
+ Element should be visible ${nav_id}
+ Default navbar contains ${default_nav}
+
+Test Help Nav Link
+ Click Link ${NAV_HOMEPAGE}
+ Current Page Is url=${URL}
+ Element should be visible ${nav_id}
+ Default navbar contains ${default_nav}
+
+Test History Nav Link
+ Click Link ${INNER_HISTORY}
+
+Test Dashboard Nav Link
+ Click Link ${INNER_DASHBOARD}
+
+
+Default navbar contains
+ [Arguments] ${navbar_content}
+
+ ${0}= Get From List ${navbar_content} 0
+ ${1}= Get From List ${navbar_content} 1
+ ${2}= Get From List ${navbar_content} 2
+
+ Element Should Contain ${nav_id} ${0}
+ Element Should Contain ${nav_id} ${1}
+ Element Should Contain ${nav_id} ${2}
+
+Inner navbar contains
+ [Arguments] ${inner_navbar_content}
+ ${0}= Get From List ${inner_navbar_content} 0
+ ${1}= Get From List ${inner_navbar_content} 1
+ Element Should Contain ${nav_id} ${0}
+ Element Should Contain ${nav_id} ${1}
+
diff --git a/end_to_end_tests/robot_tests/frontend/series_overview_tests/__init__.robot b/end_to_end_tests/robot_tests/frontend/series_overview_tests/__init__.robot
new file mode 100644
index 00000000..120799c9
--- /dev/null
+++ b/end_to_end_tests/robot_tests/frontend/series_overview_tests/__init__.robot
@@ -0,0 +1,3 @@
+*** Settings ***
+
+Force Tags SeriesOverview
\ No newline at end of file
diff --git a/end_to_end_tests/robot_tests/frontend/series_overview_tests/series_overview_breadcrumbs.robot b/end_to_end_tests/robot_tests/frontend/series_overview_tests/series_overview_breadcrumbs.robot
new file mode 100644
index 00000000..da4e49f4
--- /dev/null
+++ b/end_to_end_tests/robot_tests/frontend/series_overview_tests/series_overview_breadcrumbs.robot
@@ -0,0 +1,16 @@
+***Settings***
+Resource ../../../resources/resource.robot
+
+*** Test Cases ***
+
+Verify Last build info and Breadcrumb
+ Open overview page of series 1
+ ${info}= Get Build Info 1 1
+ ${team}= Get Team From Info ${info}
+ ${series}= Get Series From Info ${info}
+
+ Series page breadcrumbs should contain correct values ${series} ${team}
+ Navigate to team page using breadcrumbs
+ Team page should be of stored team ${team}
+ Team page breadcrumb should contain correct value ${team}
+
diff --git a/end_to_end_tests/robot_tests/frontend/series_page_tests/__init__.robot b/end_to_end_tests/robot_tests/frontend/series_page_tests/__init__.robot
new file mode 100644
index 00000000..53048fe3
--- /dev/null
+++ b/end_to_end_tests/robot_tests/frontend/series_page_tests/__init__.robot
@@ -0,0 +1,3 @@
+*** Settings ***
+
+Force Tags Series
\ No newline at end of file
diff --git a/end_to_end_tests/robot_tests/frontend/series_page_tests/navigation.robot b/end_to_end_tests/robot_tests/frontend/series_page_tests/navigation.robot
new file mode 100644
index 00000000..3a047cfe
--- /dev/null
+++ b/end_to_end_tests/robot_tests/frontend/series_page_tests/navigation.robot
@@ -0,0 +1,55 @@
+***Settings***
+
+Resource ../../../resources/resource.robot
+Library String
+Library Collections
+
+*** Variables ***
+@{series_names}
+@{last_builds}
+
+*** Test Cases ***
+
+Test Navigation to Overview Pages
+ Open Series Page of Team Epimetheus
+ Store Series Headers
+ Test Overview of All Stored Series
+
+Test Navigation to Last Builds
+ Open Series Page of Team Epimetheus
+ Store Series Headers
+ Test Last Builds of All Stored Series
+
+
+*** Keywords ***
+
+
+Store Series Headers
+ Wait Until Element is Enabled ${series_list}
+ ${series}= Get WebElements ${series_list}
+
+ FOR ${serial} IN @{series}
+
+ ${header_text}= Get Line ${serial.text} 0
+ Append To List ${series_names} ${header_text}
+ END
+
+Test Overview of All Stored Series
+ Wait Until Element is Enabled ${series_list}
+
+ FOR ${header} IN @{series_names}
+ Click Element //h3[.="${header}"]/ancestor-or-self::div[2]/div[2]/div[1]
+ Wait Until Element is Enabled ${timeline_locator}
+ Go Back
+ Wait Until Element is Enabled ${series_list}
+ END
+
+
+Test Last Builds of All Stored Series
+ Wait Until Element is Enabled ${series_list}
+ FOR ${header} IN @{series_names}
+ Click Element //h3[.="${header}"]/ancestor-or-self::div[2]/div[2]/div[2]
+ Wait Until Element is Enabled ${buildOverviewContainer}
+ Go Back
+ Wait Until Element is Enabled ${series_list}
+ END
diff --git a/end_to_end_tests/robot_tests/frontend/series_page_tests/series_amount.robot b/end_to_end_tests/robot_tests/frontend/series_page_tests/series_amount.robot
new file mode 100644
index 00000000..44163dc7
--- /dev/null
+++ b/end_to_end_tests/robot_tests/frontend/series_page_tests/series_amount.robot
@@ -0,0 +1,36 @@
+***Settings***
+
+Resource ../../../resources/resource.robot
+
+
+*** Test Cases ***
+
+
+Series Amount
+ Store Amount of Series of team in API Epimetheus
+ Open Series Page of Team Epimetheus
+ Series amount displayed by UI matches API
+
+
+*** Keywords ***
+
+
+Store Amount of Series of team in API
+ [Arguments] ${team}
+
+ ${amount}= Get Series Number ${team}
+ Set Suite Variable ${series_amount} ${amount}
+
+Open Series Page of Team
+ [Arguments] ${team}
+ ${url} = Catenate SEPARATOR= ${team_url} ${team}
+ Go To ${url}
+
+Series amount displayed by UI matches API
+ ${url}= Get Location
+
+ Wait Until Element Is Enabled ${series_list}
+ ${elements}= Get Element Count ${series_list}
+
+ Should Be Equal As Numbers ${elements} ${series_amount}
+
diff --git a/end_to_end_tests/robot_tests/frontend/series_page_tests/series_cards_breadcrumbs.robot b/end_to_end_tests/robot_tests/frontend/series_page_tests/series_cards_breadcrumbs.robot
new file mode 100644
index 00000000..534ce0dd
--- /dev/null
+++ b/end_to_end_tests/robot_tests/frontend/series_page_tests/series_cards_breadcrumbs.robot
@@ -0,0 +1,9 @@
+***Settings***
+Resource ../../../resources/resource.robot
+
+*** Test Cases ***
+
+Test Series Selector Breadcrubs
+ Open Series Page of Team Epimetheus
+ Team page should be of stored team Epimetheus
+ Team page breadcrumb should contain correct value Epimetheus
\ No newline at end of file
diff --git a/end_to_end_tests/robot_tests/frontend/suite_tests/__init__.robot b/end_to_end_tests/robot_tests/frontend/suite_tests/__init__.robot
new file mode 100644
index 00000000..7be05059
--- /dev/null
+++ b/end_to_end_tests/robot_tests/frontend/suite_tests/__init__.robot
@@ -0,0 +1,3 @@
+*** Settings ***
+
+Force Tags SuitePage
\ No newline at end of file
diff --git a/end_to_end_tests/robot_tests/frontend/suite_tests/suite_page_breadcrumbs.robot b/end_to_end_tests/robot_tests/frontend/suite_tests/suite_page_breadcrumbs.robot
new file mode 100644
index 00000000..2a4596e9
--- /dev/null
+++ b/end_to_end_tests/robot_tests/frontend/suite_tests/suite_page_breadcrumbs.robot
@@ -0,0 +1,20 @@
+***Settings***
+Resource ../../../resources/resource.robot
+
+*** Test Cases ***
+
+Verify Last build info and Breadcrumb
+ Navigate to first suite of build 1 1
+ Store the team, series, build and suite of a suite page
+ Suite page breadcrumbs should contain correct values ${stored_suite} ${stored_build} ${stored_series} ${stored_team}
+ Navigate to build overview page using breadcrumbs
+ Build page breadcrumbs should contain correct values ${stored_build} ${stored_series} ${stored_team}
+ Build overview page should be of stored build ${stored_build}
+ Open a suite 1 1 ${stored_suite}
+ Navigate to series overview page using breadcrumbs
+ Series overview page should be of stored series ${stored_series}
+ Series page breadcrumbs should contain correct values ${stored_series} ${stored_team}
+ Open a suite 1 1 ${stored_suite}
+ Navigate to team page using breadcrumbs
+ Team page should be of stored team ${stored_team}
+ Team page breadcrumb should contain correct value ${stored_team}
diff --git a/end_to_end_tests/robot_tests/frontend/team_page_tests/__init__.robot b/end_to_end_tests/robot_tests/frontend/team_page_tests/__init__.robot
new file mode 100644
index 00000000..d897e5f2
--- /dev/null
+++ b/end_to_end_tests/robot_tests/frontend/team_page_tests/__init__.robot
@@ -0,0 +1,3 @@
+*** Settings ***
+
+Force Tags Team
\ No newline at end of file
diff --git a/end_to_end_tests/robot_tests/frontend/team_page_tests/navigation.robot b/end_to_end_tests/robot_tests/frontend/team_page_tests/navigation.robot
new file mode 100644
index 00000000..3d488734
--- /dev/null
+++ b/end_to_end_tests/robot_tests/frontend/team_page_tests/navigation.robot
@@ -0,0 +1,36 @@
+***Settings***
+
+Resource ../../../resources/resource.robot
+Library String
+Library Collections
+
+*** Variables ***
+@{team_names}
+
+*** Test Cases ***
+
+Test Teams Page Component Usage
+ Open Team Page
+ Store Team Headers
+ Test Team Navigation using Team Headers
+
+*** Keywords ***
+
+Store Team Headers
+ Wait Until Element is Enabled ${teams_xpath}
+ ${teams}= Get WebElements ${teams_xpath}
+
+ FOR ${teami} IN @{teams}
+ ${header_text}= Get Line ${teami.text} 0
+ Append To List ${team_names} ${header_text}
+ END
+
+Test Team Navigation using Team Headers
+ Wait Until Element is Enabled ${teams_xpath}
+ #This long identifier points to the header part of the component that matches the header text
+ FOR ${header} IN @{team_names}
+ Click Element //*[@id="team"]/div/div[*]/h3[contains(text(),"${header}")]
+ Wait Until Element is Enabled ${series_list}
+ Go Back
+ Wait Until Element is Enabled ${teams_xpath}
+ END
\ No newline at end of file
diff --git a/end_to_end_tests/robot_tests/team_page_tests/team_amount.robot b/end_to_end_tests/robot_tests/frontend/team_page_tests/team_amount.robot
similarity index 86%
rename from end_to_end_tests/robot_tests/team_page_tests/team_amount.robot
rename to end_to_end_tests/robot_tests/frontend/team_page_tests/team_amount.robot
index 7a750ecf..273ff41b 100644
--- a/end_to_end_tests/robot_tests/team_page_tests/team_amount.robot
+++ b/end_to_end_tests/robot_tests/frontend/team_page_tests/team_amount.robot
@@ -1,5 +1,6 @@
***Settings***
-Resource ../../resources/resource.robot
+
+Resource ../../../resources/resource.robot
*** Test Cases ***
diff --git a/end_to_end_tests/robot_tests/history_page_tests/test_buttons.robot b/end_to_end_tests/robot_tests/history_page_tests/test_buttons.robot
deleted file mode 100644
index e71ce946..00000000
--- a/end_to_end_tests/robot_tests/history_page_tests/test_buttons.robot
+++ /dev/null
@@ -1,42 +0,0 @@
-***Settings***
-Resource ../../resources/resource.robot
-
-*** Test Cases ***
-
-Test Buttons
- Browser is on a history page of series 3
- Check history buttons
- Click Button 5
- Table should be limited to number=5
- Click Button 10
- Table should be limited to number=10
- Click Button 100
- Table should be limited to number=100
-
-
-*** Keywords ***
-
-
-Browser is on a history page of series
- [Arguments] ${series}
- ${str}= Catenate SEPARATOR= ${history_url} ${series} /history
- Current Page Is url=${str}
- ${url}= Get Location
- Should be equal as Strings ${url} ${str}
-
-Check history buttons
-
- Page Should Contain Button Passing
- Page Should Contain Button Failing
- Page Should Contain Button 5
- Page Should Contain Button 10
- Page Should Contain Button 15
- Page Should Contain Button 30
- Page Should Contain Button 100
-
-Table should be limited to
- [Arguments] ${number}
- Wait Until Element Is Enabled ${table_header_xpath}
- ${elements} = Get Element Count ${table_header_xpath}
- ${sum} = Evaluate ${number} + 2
- Should be True ${sum}>=${elements}
diff --git a/end_to_end_tests/robot_tests/navbar_tests/navbar.robot b/end_to_end_tests/robot_tests/navbar_tests/navbar.robot
deleted file mode 100644
index 77f20b5d..00000000
--- a/end_to_end_tests/robot_tests/navbar_tests/navbar.robot
+++ /dev/null
@@ -1,33 +0,0 @@
-***Settings***
-Resource ../../resources/resource.robot
-
-***Variable***
-
-${nav_id}= 'main-nav'
-
-***Test Cases***
-
-Test NavBar Links from index
- Current Page Is url=${URL}
- Page contains id id=${nav_id}
- Id contains id=${nav_id} 1=Help 2=Team 3=GitHub
-
- Click Link Team
- Current Page Is url=${team_url}
- Element should be visible ${nav_id}
- Id contains id=${nav_id} 1=Help 2=Team 3=GitHub
-
- Click Link Help
- Current Page Is url=${URL}
- Element should be visible ${nav_id}
- Id contains id=${nav_id} 1=Help 2=Team 3=GitHub
-
-#Test Navbar Links From Team Page
-
-
-#Test Navbar Links From Series Page
-
-
-#Test Navbar Links From History Page
-
-
diff --git a/end_to_end_tests/robot_tests/series_page_tests/amount of series.robot b/end_to_end_tests/robot_tests/series_page_tests/amount of series.robot
deleted file mode 100644
index 923aaee0..00000000
--- a/end_to_end_tests/robot_tests/series_page_tests/amount of series.robot
+++ /dev/null
@@ -1,31 +0,0 @@
-***Settings***
-Resource ../../resources/resource.robot
-
-*** Test Cases ***
-
-
-Series Amount
- Log Amount of Series of team in API Epimetheus
- UI displays correct amount of series for Epimetheus
-
-
-*** Keywords ***
-
-
-Log Amount of Series of team in API
- [Arguments] ${team}
-
- ${series}= Get Series Number ${team}
- Set Number ${series}
-
-
-
-UI displays correct amount of series for
- [Arguments] ${team}
- ${urli} = Catenate SEPARATOR= ${team_url} ${team}
- Go To ${urli}
- Wait Until Element Is Enabled //*[@id="selectedTeam"]/div[2]/div
- ${elements}= Get Element Count //*[@id="selectedTeam"]/div[2]/div
- ${api} = Get Number
- Should Be Equal As Numbers ${elements} ${api}
-
diff --git a/end_to_end_tests/robot_tests/team_page_tests/navigation.robot b/end_to_end_tests/robot_tests/team_page_tests/navigation.robot
deleted file mode 100644
index feb630de..00000000
--- a/end_to_end_tests/robot_tests/team_page_tests/navigation.robot
+++ /dev/null
@@ -1,12 +0,0 @@
-***Settings***
-Resource ../../resources/resource.robot
-
-*** Test Cases ***
-
-Test Teams Page
- Go To url=${team_url}
- Wait Until Element is Enabled ${team_xpath}
- Click Element ${team_xpath}
- Wait Until Element is Enabled ${series_xpath}
- Click Element ${series_xpath}
- Wait Until Element is Enabled ${table_header_xpath}
\ No newline at end of file
diff --git a/end_to_end_tests/run-e2e-tests.sh b/end_to_end_tests/run-e2e-tests.sh
index 1f04937a..9bca277b 100755
--- a/end_to_end_tests/run-e2e-tests.sh
+++ b/end_to_end_tests/run-e2e-tests.sh
@@ -1,21 +1,103 @@
#!/bin/sh
+
+
+if [ ! -z "${CI_PIPELINE_ID}" ]; then
+
python -m robot --outputdir ./logs/ \
--variablefile variables.py \
- --metadata "version:0.1.0" \
+ --metadata "version:0.3.0" \
+ --metadata "ci_pipeline_id:$CI_PIPELINE_ID" \
+ --metadata "branch:$CI_COMMIT_REF_NAME" \
+ --metadata "commit_sha:$CI_COMMIT_SHA" \
+ --metadata "job_url:https://github.com/$CI_REPOSITORY/actions/runs/$CI_RUN_ID" \
+ --metadata "ci_run_id:$CI_RUN_ID" \
+ --metadata "run_number:$CI_RUN_NUMBER" \
+ --metadata "username:$CI_USERNAME" \
+ --metadata "ci_event_name:$CI_EVENT_NAME" \
+ --metadata "Environment:CI" \
+ --metadata "Test_Framework:robotframework" \
+ --include Backend \
./robot_tests
-EXITVAL=$?
+BACKEND=$?
+
#Testarchiver data storing can be added here,
#Important to exit with the right exit value from the test execution,
#not with the exitvalue from data storing.
+echo "---------------------------------------------"
+echo " Archiving Backend reports from ./logs -directory"
+echo "---------------------------------------------"
+find ./logs -name \*.xml -type f -print0 | xargs -0 -n1 testarchiver --dbengine postgresql --database "$DATABASE" --host "$HOST" \
+ --user "$USER" --pw "$PASSWORD" \
+ --team Epimetheus --series ci_backend#"${CI_RUN_NUMBER}" --series "${CI_COMMIT_REF_NAME}"#"${CI_RUN_NUMBER}" --format robotframework
+
+python -m robot --outputdir ./logs/ \
+ --variablefile variables.py \
+ --metadata "version:0.3.0" \
+ --metadata "ci_pipeline_id:$CI_PIPELINE_ID" \
+ --metadata "branch:$CI_COMMIT_REF_NAME" \
+ --metadata "commit_sha:$CI_COMMIT_SHA" \
+ --metadata "job_url:https://github.com/$CI_REPOSITORY/actions/runs/$CI_RUN_ID" \
+ --metadata "ci_run_id:$CI_RUN_ID" \
+ --metadata "run_number:$CI_RUN_NUMBER" \
+ --metadata "username:$CI_USERNAME" \
+ --metadata "ci_event_name:$CI_EVENT_NAME" \
+ --metadata "Environment:CI" \
+ --metadata "Test_Framework:robotframework" \
+ --include Frontend \
+ ./robot_tests
+
+FRONTEND=$?
+
+echo "---------------------------------------------"
+echo " Archiving Frontend Page reports from ./logs -directory"
+echo "---------------------------------------------"
+find ./logs -name \*.xml -type f -print0 | xargs -0 -n1 testarchiver --dbengine postgresql --database "$DATABASE" --host "$HOST" \
+ --user "$USER" --pw "$PASSWORD" \
+ --team Epimetheus --series ci_frontend#"${CI_RUN_NUMBER}" --series "${CI_COMMIT_REF_NAME}"#"${CI_RUN_NUMBER}" --format robotframework
+
+EXITVAL=$((FRONTEND+BACKEND))
+
+else
+
+python -m robot --outputdir ./logs/ \
+ --variablefile variables.py \
+ --metadata "version:0.3.0" \
+ --metadata "environment:locally" \
+ --include Backend \
+ ./robot_tests
+BACKEND=$?
+
+#Testarchiver data storing can be added here,
+#Important to exit with the right exit value from the test execution,
+#not with the exitvalue from data storing.
+
+echo "---------------------------------------------"
+echo " Archiving Backend reports from ./logs -directory"
+echo "---------------------------------------------"
+find ./logs -name \*.xml -type f -print0 | xargs -0 -n1 testarchiver --dbengine postgresql --database "$DATABASE" --host "$HOST" \
+ --user "$USER" --pw "$PASSWORD" \
+ --team Epimetheus --series ci_backend --format robotframework
+
+
+
+python -m robot --outputdir ./logs/ \
+ --variablefile variables.py \
+ --metadata "version:0.3.0" \
+ --metadata "environment:locally" \
+ --include Frontend \
+ ./robot_tests
+FRONTEND=$?
echo "---------------------------------------------"
-echo " Archiving reports from ./logs -directory"
+echo " Archiving Frontend Page reports from ./logs -directory"
echo "---------------------------------------------"
find ./logs -name \*.xml -type f -print0 | xargs -0 -n1 testarchiver --dbengine postgresql --database "$DATABASE" --host "$HOST" \
--user "$USER" --pw "$PASSWORD" \
- --team Epimetheus --series e2e_test --format robotframework
+ --team Epimetheus --series ci_frontend --format robotframework
+EXITVAL=$((FRONTEND+BACKEND))
+fi
exit $EXITVAL
diff --git a/end_to_end_tests/variables.py b/end_to_end_tests/variables.py
index f6d95e1f..28ba1e98 100644
--- a/end_to_end_tests/variables.py
+++ b/end_to_end_tests/variables.py
@@ -6,14 +6,23 @@
BROWSER = 'chrome'
SCREEN_WIDTH = 1920
SCREEN_HEIGHT = 1080
-URL = 'http://frontend-server:3000/'
-#URL = 'http://localhost:3000/'
+
+
+if 'CI_PIPELINE_ID' in os.environ:
+ URL = 'http://frontend-server:3000/'
+else:
+ URL = 'http://localhost:3000/'
+
history_url = URL+'series/'
team_url = URL+'team/'
nav_id = 'main-nav'
-remote_url= 'epimetheus_seleniumgrid_1:4444/wd/hub'
-#remote_url=''
+if 'CI_PIPELINE_ID' in os.environ:
+ remote_url= 'epimetheus_seleniumgrid_1:4444/wd/hub'
+else:
+ remote_url=''
dir_path = os.path.dirname(os.path.realpath(__file__))
-Backend= 'http://backend-server'
-#Backend= 'http://localhost'
+if 'CI_PIPELINE_ID' in os.environ:
+ Backend= 'http://backend-server'
+else:
+ Backend= 'http://localhost'
RESOURCES = os.path.join(dir_path, 'robot', 'resources')
diff --git a/frontend/.babelrc b/frontend/.babelrc
index 9cff1deb..84a20a01 100644
--- a/frontend/.babelrc
+++ b/frontend/.babelrc
@@ -1,3 +1,3 @@
{
- "plugins": ["emotion"]
+ "plugins": ["babel-plugin-styled-components"]
}
diff --git a/frontend/.eslintrc.json b/frontend/.eslintrc.json
index 5ad5faa2..d87ab596 100644
--- a/frontend/.eslintrc.json
+++ b/frontend/.eslintrc.json
@@ -13,9 +13,10 @@
"no-console": 1,
"react-hooks/rules-of-hooks": 2,
"react-hooks/exhaustive-deps": 1,
- "no-unused-vars": ["error", { "varsIgnorePattern": "React" }]
+ "no-unused-vars": ["error", { "varsIgnorePattern": "React" }],
+ "no-irregular-whitespace": 1
},
- "plugins": ["react", "import", "jsx-a11y", "react-hooks", "emotion"],
+ "plugins": ["react", "import", "jsx-a11y", "react-hooks"],
"parser": "babel-eslint",
"parserOptions": {
"ecmaVersion": 2018,
diff --git a/frontend/.gitignore b/frontend/.gitignore
index 5586ff1a..f5e92e2e 100644
--- a/frontend/.gitignore
+++ b/frontend/.gitignore
@@ -24,5 +24,6 @@ yarn.lock
npm-debug.log*
yarn-debug.log*
yarn-error.log*
+end_to_end_tests/run-e2e-tests-python3.sh
-.env
\ No newline at end of file
+.env
diff --git a/frontend/.prettierrc b/frontend/.prettierrc
index 8421bbcf..a262ba54 100644
--- a/frontend/.prettierrc
+++ b/frontend/.prettierrc
@@ -1,4 +1,5 @@
{
"singleQuote": true,
- "semi": true
+ "semi": true,
+ "trailingComma": "es5"
}
diff --git a/frontend/README.md b/frontend/README.md
index badac13e..002bb427 100644
--- a/frontend/README.md
+++ b/frontend/README.md
@@ -14,6 +14,7 @@ npm run start
The default configuration for backend server is `http://localhost:5000`.
Backend server configuration can be changed by setting the following environment variables:
+
```
REACT_APP_SERVER_URL=localhost
REACT_APP_FRONT_END_PORT=5000
@@ -44,9 +45,11 @@ Install plugins:
[Prettier](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)
[Eslint](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)
In Visual Studio Code settings check
+
```
Prettier: Require Config
```
+
and
```
diff --git a/frontend/package.json b/frontend/package.json
index 67fdbd38..a36849ba 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -1,27 +1,32 @@
{
"name": "frontend",
- "version": "0.3.0",
+ "version": "1.0.0",
"private": true,
"dependencies": {
- "@emotion/core": "^10.0.21",
+ "apexcharts": "^3.19.2",
"i18next": "^19.4.4",
"normalize.css": "^8.0.1",
"prop-types": "^15.7.2",
"ramda": "^0.27.0",
- "react": "^16.10.2",
+ "react": "^16.13.1",
+ "react-apexcharts": "^1.3.7",
"react-dom": "^16.10.2",
"react-fontawesome": "^1.7.1",
"react-i18next": "^11.4.0",
"react-router": "^5.1.2",
"react-router-dom": "^5.1.2",
- "react-scripts": "^3.3.0"
+ "react-scripts": "^3.4.3",
+ "react-select": "^3.1.0",
+ "react-vega": "^7.3.0",
+ "styled-components": "^5.1.1",
+ "vega": "^5.13.0",
+ "vega-lite": "^4.13.0"
},
"devDependencies": {
"babel-eslint": "^10.0.3",
- "babel-plugin-emotion": "^10.0.21",
+ "babel-plugin-styled-components": "^1.11.1",
"eslint": "^6.5.1",
"eslint-config-prettier": "^6.4.0",
- "eslint-plugin-emotion": "^10.0.14",
"eslint-plugin-import": "^2.20.2",
"eslint-plugin-jsx-a11y": "^6.2.3",
"eslint-plugin-prettier": "^3.1.2",
diff --git a/frontend/public/img/testicons.png b/frontend/public/img/testicons.png
deleted file mode 100644
index 16cd525c..00000000
Binary files a/frontend/public/img/testicons.png and /dev/null differ
diff --git a/frontend/src/App.js b/frontend/src/App.jsx
similarity index 62%
rename from frontend/src/App.js
rename to frontend/src/App.jsx
index 9a61a114..d403f925 100644
--- a/frontend/src/App.js
+++ b/frontend/src/App.jsx
@@ -1,27 +1,27 @@
// eslint-disable-next-line
-import React, { useState, useEffect, Suspense } from 'react';
-/** @jsx jsx */
-import { css, jsx } from '@emotion/core';
+import React, { useEffect, Suspense } from 'react';
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom';
-import theme from './styles/theme';
import ThemeContext from './contexts/themeContext';
import MainContent from './components/MainContent';
import MainNav from './components/MainNav';
+import Footer from './components/Footer';
import History from './pages/History';
-import Dashboard from './pages/Dashboard';
+import Overview from './pages/Overview';
import Build from './pages/Build';
import Frontpage from './pages/Frontpage';
import Team from './pages/Team';
import Suite from './pages/Suite';
import { useStateValue } from './contexts/state';
import './utils/i118n';
-
import 'normalize.css';
import './index.css';
+import theme from './styles/theme';
+import { StyledApp } from './App.styles';
const App = () => {
// eslint-disable-next-line
- const [{ selectedBranchState, amountOfBuilds }, dispatch] = useStateValue();
+ const [{}, dispatch] = useStateValue();
+
useEffect(() => {
const fetchData = async () => {
dispatch({ type: 'setLoadingState', loadingState: true });
@@ -31,7 +31,7 @@ const App = () => {
dispatch({ type: 'setLoadingState', loadingState: false });
dispatch({
type: 'setBranches',
- branches: json
+ branches: json,
});
} catch (error) {
// console.log(error);
@@ -40,59 +40,11 @@ const App = () => {
fetchData();
}, [dispatch]);
- const appStyles = css`
- display: flex;
- min-height: 100vh;
- width: 100%;
- ${theme.testTheme.container} .login-btn {
- padding: 10px;
- margin-bottom: 20px;
- }
- a {
- color: ${theme.testTheme.linkColor};
- }
- a:active,
- a:hover {
- color: ${theme.testTheme.linkColor};
- }
- a.skip-main {
- left: -999px;
- position: absolute;
- top: auto;
- width: 1px;
- height: 1px;
- overflow: hidden;
- z-index: -999;
- }
- a.skip-main:focus,
- a.skip-main:active {
- background-color: #fff;
- left: auto;
- top: auto;
- width: 30%;
- height: auto;
- overflow: auto;
- margin: 10px 35%;
- padding: 5px;
- border: 1px solid black;
- text-align: center;
- z-index: 999;
- }
- ,
- select:focus,
- input:focus {
- outline: 1px solid ${theme.testTheme.linkColor};
- }
- `;
-
return (
-