diff --git a/.gitignore b/.gitignore
index 6fc9aebe..cfbb8900 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,4 +23,5 @@ test-run-details.json
cypress/fixtures/test-run-details.json
env_variables/*.env.json
env_variables/*
-!env_variables/template.env.json
\ No newline at end of file
+!env_variables/devTemplate.env.json
+!env_variables/stagingTemplate.env.json
\ No newline at end of file
diff --git a/cypress/e2e/course/shareCtlTools.feature b/cypress/e2e/course/shareCtlTools.feature
new file mode 100644
index 00000000..a409609b
--- /dev/null
+++ b/cypress/e2e/course/shareCtlTools.feature
@@ -0,0 +1,175 @@
+@unstable_test
+Feature: Teacher can share a course
+
+ As a teacher I want to share a course with other teachers from the same school
+
+ @unstable_test
+ Scenario: Pre-condition: admin adds external tools to school and teacher sets up a course with ctl tools
+ Given I am logged in as a 'admin1_nbc' at 'nbc'
+ When I click on administration in menu
+ When I navigate to new school admin page via sub menu
+ When I click on external tools panel
+ When I click the add external tool button
+ When I select the tool 'CY Test Tool Context Scope' from available tools
+ When I click on save external tool button
+ When I click the add external tool button
+ When I select the tool 'CY Test Tool Optional Protected Parameter' from available tools
+ When I click on save external tool button
+ When I click the add external tool button
+ When I select the tool 'CY Test Tool Protected Parameter' from available tools
+ When I click on save external tool button
+ Then I see the tool 'CY Test Tool Context Scope' in external tools table
+ Then I see the tool 'CY Test Tool Optional Protected Parameter' in external tools table
+ Then I see the tool 'CY Test Tool Protected Parameter' in external tools table
+
+ # Pre-condition: teacher creates a course and adds tools to the course
+ Given I am logged in as a 'teacher1_nbc' at 'nbc'
+ When I go to courses overview
+ When I click on FAB to create a new course depending on sub menu
+ When I enter the course title 'Cypress Test Course Share'
+ Then I see teacher 'Karl Herzog' is selected by default
+ When I click on button Next Steps after entering the course detail in section one
+ When I click on button Next Steps after selecting course participant details
+ Then I see the section three area as the finish page
+ When I click on button To Course Overview on the finish page
+ Then I see the course 'Cypress Test Course Share' on the course overview page
+ When I go to course 'Cypress Test Course Share'
+ Then I see course page 'Cypress Test Course Share'
+ When I click on the tools tab
+ Then I see the button to add a tool
+ # Pre-condition: teacher adds a tool with required parameter
+ When I click on the button to add a tool
+ Then I see the tool configuration page title
+ When I click on the tool configuration selection
+ When I select the tool 'CY Test Tool Context Scope' from available tools
+ When I enter 'test' in required custom parameter field 'searchparam'
+ When I click on save external tool button
+ Then I see the tool 'CY Test Tool Context Scope' in the tool overview
+ # Pre-condition: teacher adds a tool with optional protected parameter
+ When I click on the button to add a tool
+ Then I see the tool configuration page title
+ When I click on the tool configuration selection
+ When I select the tool 'CY Test Tool Optional Protected Parameter' from available tools
+ When I enter 'test' in required custom parameter field 'search'
+ When I enter 'protected' in optional custom parameter field 'protected'
+ When I click on save external tool button
+ Then I see the tool 'CY Test Tool Optional Protected Parameter' in the tool overview
+ # Pre-condition: teacher adds a tool with required protected parameter
+ When I click on the button to add a tool
+ Then I see the tool configuration page title
+ When I click on the tool configuration selection
+ When I select the tool 'CY Test Tool Protected Parameter' from available tools
+ When I enter 'test' in required custom parameter field 'search'
+ When I select 'Ja' in required protected custom parameter selection
+ When I click on save external tool button
+ Then I see the tool 'CY Test Tool Protected Parameter' in the tool overview
+
+ # Pre-condition: teacher creates a board and adds tools
+ When I go to the tab contents in course detail page
+ When I click on FAB to create new content
+ When I click on the button FAB New Column Board
+ Then I see a dialog box for column board
+ Then I see in dialog box option for multi-column board
+ Then I see in dialog box option for single column board
+ When I choose multi-column board in the dialog box
+ Then I see the page Course Board details
+ Then I see the chip Draft in the course board
+ When I click on the button Add column in the course board
+ When I click on the page outside of the column
+ # Pre-condition: teacher adds a tool with required parameter
+ When I click on plus icon to add card in column
+ When I click on plus icon to add content into card
+ When I select external tools from the menu
+ When I click on the tool configuration selection
+ When I select the tool 'CY Test Tool Context Scope' from available tools
+ When I enter 'test' in required custom parameter field 'searchparam'
+ When I click on save external tool button
+ Then I see an external tool element with tool 'CY Test Tool Context Scope'
+ # Pre-condition: teacher adds a tool with optional protected parameter
+ When I click on three dot menu in the card
+ When I select the option Edit in three dot menu on the card
+ When I click on plus icon to add content into card
+ When I select external tools from the menu
+ When I click on the tool configuration selection
+ When I select the tool 'CY Test Tool Optional Protected Parameter' from available tools
+ When I enter 'test' in required custom parameter field 'search'
+ When I enter 'protected' in optional custom parameter field 'protected'
+ When I click on save external tool button
+ Then I see an external tool element with tool 'CY Test Tool Optional Protected Parameter'
+ # Pre-condition: teacher adds a tool with required parameter
+ When I click on three dot menu in the card
+ When I select the option Edit in three dot menu on the card
+ When I click on plus icon to add content into card
+ When I select external tools from the menu
+ When I click on the tool configuration selection
+ When I select the tool 'CY Test Tool Protected Parameter' from available tools
+ When I enter 'test' in required custom parameter field 'search'
+ When I select 'Ja' in required protected custom parameter selection
+ When I click on save external tool button
+ Then I see an external tool element with tool 'CY Test Tool Protected Parameter'
+
+ # Teacher shares the course with another teacher in the same school
+ Given I am logged in as a 'teacher1_nbc' at 'nbc'
+ When I go to courses overview
+ When I go to course 'Cypress Test Course Share'
+ Then I see course page 'Cypress Test Course Share'
+ When I click on share course button
+ Then I see the share course dialog box
+ Then I see the info text in the share course dialog
+ Then I see the school internal checkbox as checked
+ Then I see the expiry date checkbox as checked
+ When I click on the continue button in the share course dialog
+ Then I see the import share course url in the share course result dialog
+ Then I see the mail button in the share course result dialog
+ Then I see the copy link button in the share course result dialog
+ Then I see the mail QR-Code button in the share course result dialog
+ When I save the import share course url
+ # Switch teacher to import shared course
+ Given I am logged in as a 'teacher2_nbc' at 'nbc'
+ When I go to courses overview
+ When I visit the saved import url of the shared course
+ Then I see the import share course dialog
+ Then I see the import share course tools info
+ Then I see 'Cypress Test Course Share' in the course name field
+ When I enter 'Cypress Test Course Import' in the course name field
+ When I click on the import course button
+ When I go to course 'Cypress Test Course Import'
+ Then I see course page 'Cypress Test Course Import'
+ # Teacher sees marked tools in tools tab
+ When I click on the tools tab
+ Then I see the tool 'CY Test Tool Context Scope' in the tool overview
+ Then I see the tool 'CY Test Tool Optional Protected Parameter' in the tool overview
+ Then I see the tool 'CY Test Tool Optional Protected Parameter' is marked as incomplete operational
+ Then I see the tool 'CY Test Tool Protected Parameter' in the tool overview
+ Then I see the tool 'CY Test Tool Protected Parameter' is marked as incomplete
+ # Teacher sees marked tools in board
+ When I go to the tab contents in course detail page
+ When I click on card Course Board
+ Then I see an external tool element with tool 'CY Test Tool Context Scope'
+ Then I see an external tool element with tool 'CY Test Tool Optional Protected Parameter'
+ Then I see external tool element with tool 'CY Test Tool Optional Protected Parameter' is marked as incomplete operational
+ Then I see an external tool element with tool 'CY Test Tool Protected Parameter'
+ Then I see external tool element with tool 'CY Test Tool Protected Parameter' is marked as incomplete
+ # Post-condition: admin deletes courses
+ Given I am logged in as a 'admin1_nbc' at 'nbc'
+ When I click on administration in menu
+ When I go to course administration page
+ When I click the delete button for course 'Cypress Test Course Share' in course table
+ Then I see the delete modal
+ When I click the confirmation button on the delete modal
+ When I click the delete button for course 'Cypress Test Course Import' in course table
+ Then I see the delete modal
+ When I click the confirmation button on the delete modal
+ Then I do not see course 'Cypress Test Course Share' in course table
+ Then I do not see course 'Cypress Test Course Import' in course table
+ # Post-condition: admin deletes external tools
+ When I click on administration in menu
+ When I navigate to new school admin page via sub menu
+ When I click on external tools panel
+ Then I see the external tools table
+ When I click on delete button of tool 'CY Test Tool Context Scope'
+ When I confirm deletion on deletion dialog
+ When I click on delete button of tool 'CY Test Tool Optional Protected Parameter'
+ When I confirm deletion on deletion dialog
+ When I click on delete button of tool 'CY Test Tool Protected Parameter'
+ When I confirm deletion on deletion dialog
diff --git a/cypress/support/pages/course/pageCourses.js b/cypress/support/pages/course/pageCourses.js
index 3175e109..f0f08d33 100644
--- a/cypress/support/pages/course/pageCourses.js
+++ b/cypress/support/pages/course/pageCourses.js
@@ -144,6 +144,7 @@ class Courses {
static #delteDialogTitle = '[data-testid="dialog-title"]';
static #delteDialogContent = '[data-testid="delete-dialog-content"]';
static #confirmDeleteDialogButton = '[data-testid="dialog-confirm"]';
+ static #btnShareCourse = '[data-testid="room-menu-share"]';
selectTeacherFromTeacherField(userName) {
cy.get(Courses.#teacherFieldContainer).click();
@@ -1192,5 +1193,9 @@ class Courses {
cy.wrap({ toolName: "", isLaunched: false }).as("launchedTool");
}
+ clickShareCourseButton() {
+ cy.get(Courses.#dropDownCourse).parent().click();
+ cy.get(Courses.#btnShareCourse).click();
+ }
}
export default Courses;
diff --git a/cypress/support/pages/course/pageImportCourseModal.js b/cypress/support/pages/course/pageImportCourseModal.js
new file mode 100644
index 00000000..07a20cdd
--- /dev/null
+++ b/cypress/support/pages/course/pageImportCourseModal.js
@@ -0,0 +1,57 @@
+"use strict"
+
+class ImportCourseModal {
+
+ static #importShareCourseDialog = '[data-testid="import-modal"]'
+ static #importShareCourseToolsInfo = '[data-testid="import-modal-external-tools-info"]'
+ static #importShareCourseNameInputDiv = '[data-testid="import-modal-name-input"]'
+ static #importShareCourseNameInputField = 'div[data-testid="import-modal-name-input"] input[class="v-field__input"]'
+ static #importShareCourseDialogConfirmButton = '[data-testid="dialog-confirm"]';
+ static #importShareCourseDialogTitle = '[data-testid="dialog-title"]';
+ static #importShareCourseDialogTableHeader = '[data-testid="import-options-table-header"]';
+ static #importShareCourseDialogPersonalData = '[data-testid="import-options-personal-data-text"]';
+ static #importShareCourseDialogFilesInfo = '[data-testid="import-modal-coursefiles-info"]';
+ static #importShareCourseDialogExternalToolsInfo = '[data-testid="import-modal-external-tools-protected-parameter-info"]';
+
+ seeImportShareCourseDialogBox() {
+ cy.get(ImportCourseModal.#importShareCourseDialog).should("be.visible");
+ }
+
+ seeImportShareCourseToolsInfo() {
+ cy.get(ImportCourseModal.#importShareCourseToolsInfo).should("be.visible");
+ cy.get(ImportCourseModal.#importShareCourseDialogTitle).should("be.visible");
+ cy.get(ImportCourseModal.#importShareCourseDialogTableHeader).should("be.visible");
+ cy.get(ImportCourseModal.#importShareCourseDialogPersonalData).should("be.visible");
+ cy.get(ImportCourseModal.#importShareCourseDialogFilesInfo).should("be.visible");
+ cy.get(ImportCourseModal.#importShareCourseDialogExternalToolsInfo).should("be.visible");
+ }
+
+ enterCourseNameForImportCourse(input) {
+ cy.get(ImportCourseModal.#importShareCourseNameInputDiv).should("be.visible");
+ cy.get(ImportCourseModal.#importShareCourseNameInputDiv).clear();
+ cy.get(ImportCourseModal.#importShareCourseNameInputDiv).type(input);
+ }
+
+ clickOnConfirmButtonInImportShareCourseDialog() {
+ cy.get(ImportCourseModal.#importShareCourseDialogConfirmButton).click();
+ }
+
+ visitSavedShareCourseUrl() {
+ cy.get("@importShareCourseUrl").then((url) => {
+ cy.visit(url)
+ });
+ }
+
+ seeDefaultCourseNameForImportCourse(defaultCourseName) {
+ cy.get(ImportCourseModal.#importShareCourseNameInputDiv).should("be.visible");
+ cy.get(ImportCourseModal.#importShareCourseNameInputField).should("be.visible");
+ cy.get(ImportCourseModal.#importShareCourseNameInputField)
+ .invoke("attr", "value")
+ .then((value) => {
+ expect(value).to.equal(defaultCourseName);
+ });
+
+ }
+}
+
+export default ImportCourseModal;
diff --git a/cypress/support/pages/course/pageShareCourseModal.js b/cypress/support/pages/course/pageShareCourseModal.js
new file mode 100644
index 00000000..207b163d
--- /dev/null
+++ b/cypress/support/pages/course/pageShareCourseModal.js
@@ -0,0 +1,83 @@
+"use strict"
+
+class ShareCourseModal {
+ static #shareCourseDialog = '[data-testid="share-dialog"]'
+ static #shareCourseDialogInfoTextTitle = '[data-testid="share-options-info-text"]';
+ static #shareCourseDialogInfoTextContainer = '[data-testid="share-options-table-header"]';
+ static #shareCourseDialogPersonalDataInfo = '[data-testid="share-options-personal-data-text"]';
+ static #shareCourseDialogExternalToolsInfo = '[data-testid="share-modal-external-tools-info"]';
+ static #shareCourseDialogToolProtectedParamsInfo = '[data-testid="share-modal-external-tools-protected-parameter-info"]';
+ static #shareCourseDialogFilesInfo = '[data-testid="share-modal-coursefiles-info"]';
+ static #shareCourseDialogSchoolInternalCheckBox = '[data-testid="isSchoolInternal"]';
+ static #shareCourseDialogExpiryDateCheckBox = '[data-testid="hasExpiryDate"]';
+ static #shareCourseResultUrlTextBox = '[data-testid="share-course-result-url"]';
+ static #dialogNextButton = '[data-testid="dialog-next"]';
+ static #shareCourseDialogMailButton = '[data-testid="shareMailAction"]';
+ static #shareCourseDialogCopyLinkButton = '[data-testid="copyAction"]';
+ static #shareCourseDialogQrCodeButton = '[data-testid="qrCodeAction"]';
+
+ seeShareCourseDialogBox() {
+ cy.get(ShareCourseModal.#shareCourseDialog).should("be.visible");
+ }
+
+ seeInfoTextInShareCourseDialog() {
+ cy.get(ShareCourseModal.#shareCourseDialogInfoTextTitle).should("be.visible");
+ cy.get(ShareCourseModal.#shareCourseDialogInfoTextContainer).should("be.visible");
+ cy.get(ShareCourseModal.#shareCourseDialogPersonalDataInfo).should("be.visible");
+ cy.get(ShareCourseModal.#shareCourseDialogExternalToolsInfo).should("be.visible");
+ cy.get(ShareCourseModal.#shareCourseDialogToolProtectedParamsInfo).should("be.visible");
+ cy.get(ShareCourseModal.#shareCourseDialogFilesInfo).should("be.visible");
+ }
+
+ seeSchoolInternalCheckBoxAsChecked() {
+ cy.get(ShareCourseModal.#shareCourseDialogSchoolInternalCheckBox).should("be.visible");
+ cy.get(ShareCourseModal.#shareCourseDialogSchoolInternalCheckBox)
+ .find('input[type="checkbox"]')
+ .should("be.checked");
+ }
+
+ seeExpiryDateCheckBoxAsChecked() {
+ cy.get(ShareCourseModal.#shareCourseDialogExpiryDateCheckBox).should("be.visible");
+ cy.get(ShareCourseModal.#shareCourseDialogSchoolInternalCheckBox)
+ .find('input[type="checkbox"]')
+ .should("be.checked");
+ }
+
+ uncheckSchoolInternalCheckBoxInShareCourseDialog() {
+ cy.get(ShareCourseModal.#shareCourseDialogSchoolInternalCheckBox)
+ .find('input[type="checkbox"]')
+ .uncheck();
+ }
+
+ clickContinueButtonInDialog() {
+ cy.get(ShareCourseModal.#dialogNextButton).click();
+ }
+
+ seeCopyUrlInShareCourseResultDialog() {
+ cy.get(ShareCourseModal.#shareCourseResultUrlTextBox).should("be.visible");
+ }
+
+ saveTheUrlInShareCourseResultDialog() {
+ cy.get(ShareCourseModal.#shareCourseResultUrlTextBox)
+ .find(".v-field__input")
+ .invoke("attr", "value")
+ .then((value) => {
+ cy.wrap(value).as("importShareCourseUrl");
+ });
+ }
+
+ seeMailButtonInShareCourseResultDialog() {
+ cy.get(ShareCourseModal.#shareCourseDialogMailButton).should("be.visible");
+ }
+
+ seeCopyLinkButtonInShareCourseResultDialog() {
+ cy.get(ShareCourseModal.#shareCourseDialogCopyLinkButton).should("be.visible");
+ }
+
+ seeQrCodeButtonInShareCourseResultDialog() {
+ cy.get(ShareCourseModal.#shareCourseDialogQrCodeButton).should("be.visible");
+ }
+
+}
+
+export default ShareCourseModal;
diff --git a/cypress/support/pages/course_board/pageBoard.js b/cypress/support/pages/course_board/pageBoard.js
index 72e13fbf..4ac04c31 100644
--- a/cypress/support/pages/course_board/pageBoard.js
+++ b/cypress/support/pages/course_board/pageBoard.js
@@ -11,7 +11,7 @@ class Board {
static #mainPageArea = '[id="main-content"]';
static #editOptionThreeDot = '[data-testid="board-menu-action-edit"]';
static #threeDotMenuInColumn = '[data-testid="column-menu-btn-0"]';
- static #threeDotMenuInCard = '[data-testid="card-menu-btn"]';
+ static #threeDotMenuInCard = '[data-testid="card-menu-btn-0-0"]';
static #threeDotMenuOnDeletedElement = '[data-testid="deleted-element-menu-btn"]';
static #deleteOptionThreeDot = '[data-testid="board-menu-action-delete"]';
static #confirmButtonInModal = '[data-testid="dialog-confirm"]';
@@ -370,5 +370,9 @@ class Board {
seeTextInTextFieldInCard(textContent){
cy.contains(textContent);
}
+
+ seeDeletedElement(name) {
+ cy.get(Board.#deletedElement).contains(name).should("be.visible");
+ }
}
export default Board;
diff --git a/cypress/support/step_definition/course/shareCourseSteps.spec.js b/cypress/support/step_definition/course/shareCourseSteps.spec.js
new file mode 100644
index 00000000..feabac53
--- /dev/null
+++ b/cypress/support/step_definition/course/shareCourseSteps.spec.js
@@ -0,0 +1,80 @@
+const { When, Then } = require("@badeball/cypress-cucumber-preprocessor");
+import Courses from "../../pages/course/pageCourses";
+import ShareCourseModal from "../../pages/course/pageShareCourseModal"
+import ImportCourseModal from "../../pages/course/pageImportCourseModal"
+
+const courses = new Courses();
+const shareCourseModal = new ShareCourseModal();
+const importCourseModal = new ImportCourseModal();
+
+When("I click on share course button", () => {
+ courses.clickShareCourseButton();
+});
+
+Then("I see the share course dialog box", () => {
+ shareCourseModal.seeShareCourseDialogBox();
+});
+
+Then("I see the info text in the share course dialog", () => {
+ shareCourseModal.seeInfoTextInShareCourseDialog();
+});
+
+Then("I see the school internal checkbox as checked", () => {
+ shareCourseModal.seeSchoolInternalCheckBoxAsChecked();
+});
+
+Then("I see the expiry date checkbox as checked", () => {
+ shareCourseModal.seeExpiryDateCheckBoxAsChecked();
+});
+
+When("I uncheck the school internal checkbox", () => {
+ shareCourseModal.uncheckSchoolInternalCheckBoxInShareCourseDialog();
+});
+
+When("I click on the continue button in the share course dialog", () => {
+ shareCourseModal.clickContinueButtonInDialog();
+});
+
+Then("I see the import share course url in the share course result dialog", () => {
+ shareCourseModal.seeCopyUrlInShareCourseResultDialog();
+});
+
+Then("I see the mail button in the share course result dialog", () => {
+ shareCourseModal.seeMailButtonInShareCourseResultDialog();
+});
+
+Then("I see the copy link button in the share course result dialog", () => {
+ shareCourseModal.seeCopyLinkButtonInShareCourseResultDialog();
+});
+
+Then("I see the mail QR-Code button in the share course result dialog", () => {
+ shareCourseModal.seeQrCodeButtonInShareCourseResultDialog();
+});
+
+When("I save the import share course url", () => {
+ shareCourseModal.saveTheUrlInShareCourseResultDialog();
+});
+
+When("I visit the saved import url of the shared course", () => {
+ importCourseModal.visitSavedShareCourseUrl();
+});
+
+Then("I see the import share course dialog", () => {
+ importCourseModal.seeImportShareCourseDialogBox();
+});
+
+Then("I see the import share course tools info", () => {
+ importCourseModal.seeImportShareCourseToolsInfo();
+});
+
+Then("I see {string} in the course name field", (defaultCourseName) => {
+ importCourseModal.seeDefaultCourseNameForImportCourse(defaultCourseName);
+});
+
+When("I enter {string} in the course name field", (importCourseName) => {
+ importCourseModal.enterCourseNameForImportCourse(importCourseName);
+});
+
+When("I click on the import course button", () => {
+ importCourseModal.clickOnConfirmButtonInImportShareCourseDialog();
+});
diff --git a/docs/running_tests_guide.md b/docs/executing_tests_guide.md
similarity index 100%
rename from docs/running_tests_guide.md
rename to docs/executing_tests_guide.md
diff --git a/docs/folder_structure.md b/docs/folder_structure.md
index 377ddc11..22647dff 100644
--- a/docs/folder_structure.md
+++ b/docs/folder_structure.md
@@ -31,7 +31,14 @@ This document outlines the directory layout of the project and the purpose of ea
| | |___ e2e.js
| |___ videos
|---- docs
-| |___ tags.md (detailed documentation for relevant topic)
+| |___ branch_activation.md
+ |___ folder_structure.md
+ |___ executing_tests.md
+ |___ setup.md
+ |___ tags.md
+|---- env_variables
+| |___ devTemplate.env.json
+ |___ stagingTemplate.env.json
|---- reports (containing html report & assets)
|---- logs(contains logs of the test run)
|---- node_modules
diff --git a/docs/setup.md b/docs/setup.md
index ca2af617..cd014988 100644
--- a/docs/setup.md
+++ b/docs/setup.md
@@ -28,13 +28,27 @@ This document provides comprehensive instructions for setting up the project env
-3. **Setting Up Environment Configuration**
+3. **Setting Up Environment Variables for the Testing User Credentials and URLs**
- - Duplicate [`template.env.json`](env_variables/template.env.json) file and rename the duplicated file to `local.env.json` in the env_variables folder
- - Add your credentials and environment-specific variables to `local.env.json` from 1Password including api keys
- **(Remember add all instances as in 1Password we have different vaults available for each namespace)**
-
+ ##### Setting Up Environment Variables for Dev Environment/Cluster:
+
+ - Duplicate the file [devTemplate.env.json](../env_variables/devTemplate.env.json) and rename the duplicated file to `local.env.json` inside the `env_variables` folder.
+ - Include the required development namespace URLs for BRB/DBC/NBC.
+ - Test user data on development clusters are created using the school API.
+ - To retrieve the API keys for all three namespaces, navigate to 1Password (1PW).
+ - Contact QA team for the necessary 1Password links.
+
+ ##### Setting Up Environment Variables for Staging Environment/Cluster:
+
+ - Duplicate the file [stagingTemplate.env.json](../env_variables/stagingTemplate.env.json) and rename the duplicated file to `staging.env.json` in the `env_variables` folder.
+ - Include the required staging namespace URLs for BRB/DBC/NBC.
+ - Test data on the staging environment are fetched from the seed data on the server.
+ - Add the environment-specific credentials to `staging.env.json` from 1Password (1PW).
+ - Ensure all instances are included, as 1Password contains different vaults for each namespace with testing credentials.
+ - Contact QA team for the necessary 1Password links.
+
+
4. **Installing Dependencies**
@@ -49,4 +63,4 @@ This document provides comprehensive instructions for setting up the project env
5. **Running Cypress Tests**
- For details on running Cypress tests, including options and configurations, refer to the [Running Tests Guide](running_tests_guide.md)
+ For details on running Cypress tests, including options and configurations, refer to the [Executing Tests Guide](executing_tests_guide.md)
diff --git a/env_variables/template.env.json b/env_variables/devTemplate.env.json
similarity index 100%
rename from env_variables/template.env.json
rename to env_variables/devTemplate.env.json
diff --git a/env_variables/stagingTemplate.env.json b/env_variables/stagingTemplate.env.json
new file mode 100644
index 00000000..41cd4c73
--- /dev/null
+++ b/env_variables/stagingTemplate.env.json
@@ -0,0 +1,91 @@
+{
+ "env": {
+ "BRB": "",
+ "NBC": "",
+ "DBC": "",
+ "TEACHER_1_BRB_EMAIL": "",
+ "TEACHER_1_BRB_PASSWORD": "",
+ "TEACHER_1_BRB_FIRST_NAME": "",
+ "TEACHER_1_BRB_LAST_NAME": "",
+ "TEACHER_2_BRB_EMAIL": "",
+ "TEACHER_2_BRB_PASSWORD": "",
+ "TEACHER_2_BRB_FIRST_NAME": "",
+ "TEACHER_2_BRB_LAST_NAME": "",
+ "TEACHER_1_DBC_EMAIL": "",
+ "TEACHER_1_DBC_PASSWORD": "",
+ "TEACHER_1_DBC_FIRST_NAME": "",
+ "TEACHER_1_DBC_LAST_NAME": "",
+ "TEACHER_2_DBC_EMAIL": "",
+ "TEACHER_2_DBC_PASSWORD": "",
+ "TEACHER_2_DBC_FIRST_NAME": "",
+ "TEACHER_2_DBC_LAST_NAME": "",
+ "TEACHER_1_NBC_EMAIL": "",
+ "TEACHER_1_NBC_PASSWORD": "",
+ "TEACHER_1_NBC_FIRST_NAME": "",
+ "TEACHER_1_NBC_LAST_NAME": "",
+ "TEACHER_2_NBC_EMAIL": "",
+ "TEACHER_2_NBC_PASSWORD": "",
+ "TEACHER_2_NBC_FIRST_NAME": "",
+ "TEACHER_2_NBC_LAST_NAME": "",
+ "STUDENT_1_BRB_EMAIL": "",
+ "STUDENT_1_BRB_PASSWORD": "",
+ "STUDENT_2_BRB_EMAIL": "",
+ "STUDENT_2_BRB_PASSWORD": "",
+ "STUDENT_1_DBC_EMAIL": "",
+ "STUDENT_1_DBC_PASSWORD": "",
+ "STUDENT_2_DBC_EMAIL": "",
+ "STUDENT_2_DBC_PASSWORD": "",
+ "STUDENT_1_NBC_EMAIL": "",
+ "STUDENT_1_NBC_PASSWORD": "",
+ "STUDENT_2_NBC_EMAIL": "",
+ "STUDENT_2_NBC_PASSWORD": "",
+ "ADMIN_1_BRB_EMAIL": "",
+ "ADMIN_1_BRB_PASSWORD": "",
+ "ADMIN_1_DBC_EMAIL": "",
+ "ADMIN_1_DBC_PASSWORD": "",
+ "ADMIN_1_NBC_EMAIL": "",
+ "ADMIN_1_NBC_PASSWORD": "",
+ "EXPERT_1_BRB_EMAIL": "",
+ "EXPERT_1_BRB_PASSWORD": "",
+ "EXPERT_1_DBC_EMAIL": "",
+ "EXPERT_1_DBC_PASSWORD": "",
+ "EXPERT_1_NBC_EMAIL": "",
+ "EXPERT_1_NBC_PASSWORD": "",
+ "STUDENT_EXTERN_BRB": "",
+ "STUDENT_EXTERN_BRB_PASSWORD": "",
+ "STUDENT_EXTERN_DBC": "",
+ "STUDENT_EXTERN_DBC_PASSWORD": "",
+ "STUDENT_EXTERN_NBC": "",
+ "STUDENT_EXTERN_NBC_PASSWORD": "",
+ "STUDENT_BRB_PASSWORD_CHANGE_EMAIL": "",
+ "STUDENT_BRB_PASSWORD_CHANGE_OLD_PWD": "",
+ "STUDENT_BRB_PASSWORD_CHANGE_NEW_PWD": "",
+ "STUDENT_DBC_PASSWORD_CHANGE_EMAIL": "",
+ "STUDENT_DBC_PASSWORD_CHANGE_OLD_PWD": "",
+ "STUDENT_DBC_PASSWORD_CHANGE_NEW_PWD": "",
+ "STUDENT_NBC_PASSWORD_CHANGE_EMAIL": "",
+ "STUDENT_NBC_PASSWORD_CHANGE_OLD_PWD": "",
+ "STUDENT_NBC_PASSWORD_CHANGE_NEW_PWD": "",
+ "INITIAL_PWD_BY_ADMIN": "",
+ "SET_NEW_PWD_BY_STUDENT": "",
+ "SET_NEW_PWD_BY_TEACHER": "",
+ "STUDENT_LDAP_BRB": "",
+ "STUDENT_LDAP_BRB_PASSWORD": "",
+ "TEACHER_LDAP_BRB": "",
+ "TEACHER_LDAP_BRB_PASSWORD": "",
+ "ADMIN_LDAP_BRB": "",
+ "ADMIN_LDAP_BRB_PASSWORD": "",
+ "STUDENT_LDAP_DBC": "",
+ "STUDENT_LDAP_DBC_PASSWORD": "",
+ "TEACHER_LDAP_DBC": "",
+ "TEACHER_LDAP_DBC_PASSWORD": "",
+ "ADMIN_LDAP_DBC": "",
+ "ADMIN_LDAP_DBC_PASSWORD": "",
+ "STUDENT_LDAP_NBC": "",
+ "STUDENT_LDAP_NBC_PASSWORD": "",
+ "TEACHER_LDAP_NBC": "",
+ "TEACHER_LDAP_NBC_PASSWORD": "",
+ "ADMIN_LDAP_NBC": "",
+ "ADMIN_LDAP_NBC_PASSWORD": ""
+ }
+}