Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
179e827
Added firsrt enzyme test
Oct 18, 2021
8b9838f
Update menu item test
Oct 18, 2021
0bb05a9
Update menu item test
Oct 18, 2021
b115ad5
Update menu item test
Oct 18, 2021
b55957d
Update menu item test
Oct 18, 2021
19945a5
Fix footer and header unit tests
Nov 16, 2021
f8ed849
Add selenium test
kac-csuf Nov 17, 2021
938948f
add enzyme packages
kac-csuf Nov 17, 2021
d23c517
Update dependency
Nov 24, 2021
26a396c
Added componen t tests
Nov 25, 2021
37e047e
Added more tests
Nov 25, 2021
fc3ca0c
Added more tests
Nov 25, 2021
ddc7cf6
update tests
Nov 25, 2021
facc781
Create webpack.yml
chidelmun Nov 25, 2021
95dac89
Update webpack.yml
chidelmun Nov 25, 2021
f066488
Update README.md
chidelmun Nov 25, 2021
559b4ae
Update README.md
chidelmun Nov 25, 2021
2377971
Update webpack.yml
chidelmun Nov 25, 2021
66625bc
Update README.md
chidelmun Nov 25, 2021
751ae97
Update README.md
chidelmun Nov 25, 2021
84faa32
Update webpack.yml
chidelmun Nov 25, 2021
4273e3c
Update webpack.yml
chidelmun Nov 25, 2021
18cbd67
update slenium tests
kac-csuf Nov 27, 2021
c3b92df
Update selenium_tests.js
kac-csuf Nov 27, 2021
62d769c
update tests
kac-csuf Nov 28, 2021
91c05ec
Create login_email_test.js
kac-csuf Nov 28, 2021
5dc8e7d
Update package.json
kac-csuf Nov 28, 2021
3712236
Update add_to_cart_multiple_test.js
kac-csuf Nov 28, 2021
8a26523
Create logout_test.js
acxcvii Nov 28, 2021
f743b44
Create main_menu_test
acxcvii Nov 29, 2021
8f1e684
Update main_menu_test.us
acxcvii Nov 29, 2021
84da70c
Update main_menu_test.js
acxcvii Nov 29, 2021
23f084b
Merge branch 'master' of https://github.com/CSUF-Avengers/fullstack-t…
acxcvii Nov 29, 2021
ffef572
update main_menu_test.js
acxcvii Nov 29, 2021
3bbf29c
create cart_page_test.js
acxcvii Nov 29, 2021
112d722
update booking_and_profile_test.js
acxcvii Nov 29, 2021
1991532
update booking_and_profile_test.js
acxcvii Nov 29, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .github/workflows/webpack.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Enzyme Unit Tests

on:
push:
branches: [ master ]
pull_request:
branches: [ master ]

jobs:
build:
runs-on: ubuntu-latest

strategy:
matrix:
node-version: [12.x,14.x,16.x]

steps:
- uses: actions/checkout@v2

- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}

- name: Run Unit Tests
run: |
cd final/client
npm install
npm run test
5 changes: 5 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions .idea/fullstack-tutorial.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
# Notice
This repository is a fork of the original project(https://github.com/apollographql/fullstack-tutorial) maintained by Team Avengers of California State University Fullerton as a requirement for the Masters in Software Engineering program through the course Software Verification and Validation

The goal of this project was to use Enzyme as a unit testing tool to improve the client side unit tests of this fullstack application
Here is the status of all the unit tests:

[![Enzyme Unit Tests](https://github.com/CSUF-Avengers/fullstack-tutorial/actions/workflows/webpack.yml/badge.svg)](https://github.com/CSUF-Avengers/fullstack-tutorial/actions/workflows/webpack.yml)

# Apollo tutorial

This is the fullstack app for the [Apollo tutorial](http://apollographql.com/docs/tutorial/introduction.html). 🚀
Expand All @@ -23,3 +31,9 @@ and
```bash
cd final/client && npm i && npm start
```
## Unit Testing

To run the unit tests, run the command(after npm install)
```bash
cd final/client && npm run test
```
46 changes: 46 additions & 0 deletions SeleniumTests/add_to_cart_multiple_test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
const {Builder, By, Key, until, WebElement} = require("selenium-webdriver");
require("chromedriver");
let assert = require("assert");

async function addToCartMultiple() {
let driver = await new Builder().forBrowser("chrome").build();
try {
await driver.get("http://localhost:3000/")
// Check page title
let title = await driver.getTitle();
assert.equal(title, "Launches");
// Login with email
await driver.findElement(By.name("email")).sendKeys("test@email.com");
await driver.findElement(By.xpath("/html/body/div/div/form/button")).click();
// Wait until page is loaded then go to Starlink-15
await driver.wait(until.elementLocated(By.xpath("/html/body/div/div[2]/a[1]")), 300000);
await driver.findElement(By.xpath("/html/body/div/div[2]/a[1]")).click();
// Wait until page is loaded then add to cart
await driver.wait(until.elementLocated(By.xpath("/html/body/div/div[2]/div[3]/button")), 300000);
let addToCart = await driver.findElement(By.xpath("/html/body/div/div[2]/div[3]/button"));
assert.equal(await addToCart.getText(), "ADD TO CART");
await driver.findElement(By.xpath("/html/body/div/div[2]/div[3]/button")).click();
// Go back home
await driver.findElement(By.xpath("/html/body/div/footer/div/a[1]")).click();
await driver.wait(until.elementLocated(By.xpath("/html/body/div/div[2]/a[2]")), 300000);
await driver.findElement(By.xpath("/html/body/div/div[2]/a[2]")).click();
await driver.wait(until.elementLocated(By.xpath("/html/body/div/div[2]/div[3]/button")), 300000);
await driver.findElement(By.xpath("/html/body/div/div[2]/div[3]/button")).click();
addToCart = await driver.findElement(By.xpath("/html/body/div/div[2]/div[3]/button"));
assert.equal(await addToCart.getText(), "REMOVE FROM CART");
// Go to the cart page
await driver.findElement(By.xpath("/html/body/div/footer/div/a[2]")).click();
await driver.wait(until.elementLocated(By.xpath("/html/body/div/div[2]/button")), 300000);
let starlink = await driver.findElement(By.xpath("/html/body/div/div[2]/a[1]"));
assert(starlink != null)
let sentinel = await driver.findElement(By.xpath("/html/body/div/div[2]/a[2]"));
assert(sentinel != null)
assert.notEqual(starlink, sentinel);
let bookAllButton = await driver.findElement(By.xpath("/html/body/div/div[2]/button"));
assert.equal(await bookAllButton.getText(), "BOOK ALL");
}
finally {
await driver.quit();
}
}
addToCartMultiple()
36 changes: 36 additions & 0 deletions SeleniumTests/add_to_cart_single_test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
const {Builder, By, Key, until, WebElement} = require("selenium-webdriver");
require("chromedriver");
let assert = require("assert");

async function addToCartSingle() {
let driver = await new Builder().forBrowser("chrome").build();
try {
await driver.get("http://localhost:3000/")
// Check page title
let title = await driver.getTitle();
assert.equal(title, "Launches");
// Login with email
await driver.findElement(By.name("email")).sendKeys("test@email.com");
await driver.findElement(By.xpath("/html/body/div/div/form/button")).click();
// Wait until page is loaded then go to Starlink-15
await driver.wait(until.elementLocated(By.xpath("/html/body/div/div[2]/a[1]")), 300000);
await driver.findElement(By.xpath("/html/body/div/div[2]/a[1]")).click();
// Wait until page is loaded then add to cart
await driver.wait(until.elementLocated(By.xpath("/html/body/div/div[2]/div[3]/button")), 300000);
await driver.findElement(By.xpath("/html/body/div/div[2]/div[3]/button")).click();
let addToCart = await driver.findElement(By.xpath("/html/body/div/div[2]/div[3]/button"));
assert.equal(await addToCart.getText(), "REMOVE FROM CART");
// Go to the cart page
await driver.findElement(By.xpath("/html/body/div/footer/div/a[2]")).click();
await driver.wait(until.elementLocated(By.xpath("/html/body/div/div[2]/button")), 300000);
let starlink = await driver.findElement(By.xpath("/html/body/div/div[2]/a[1]"));
assert(starlink != null)
let bookAllButton = await driver.findElement(By.xpath("/html/body/div/div[2]/button"));
assert.equal(await bookAllButton.getText(), "BOOK ALL");
}
finally {
await driver.quit();
}
}
addToCartSingle();

64 changes: 64 additions & 0 deletions SeleniumTests/booking_and_profile_test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
require("chromedriver");
let assert = require("assert");
const {Builder, By, Key, util, Browser, until, Actions} = require("selenium-webdriver");
const { WebDriver } = require("selenium-webdriver/lib/webdriver");
let driver = new Builder().forBrowser("chrome").build();

async function profilePagetest(){
try{

await driver.get("http://localhost:3000");
// Logging in wiht email
await driver.findElement(By.name("email")).sendKeys('test@email.com');
await driver.findElement(By.xpath("/html/body/div/div/form/button")).click();

// Testing Profile Button
await driver.wait(until.elementLocated(By.xpath("/html/body/div/footer/div/a[3]")));
await driver.findElement(By.xpath("/html/body/div/footer/div/a[3]")).click();
let profilePage = await driver.findElement(By.xpath("/html/body/div/footer/div/a[3]")).getText();
assert.equal(profilePage,"PROFILE")
console.log("Test Passed!!PROFILE button works correctly.");

// Go back to Home page
await driver.wait(until.elementLocated(By.xpath("/html/body/div/footer/div/a[1]")));
await driver.findElement(By.xpath("/html/body/div/footer/div/a[1]")).click();
console.log(await driver.getCurrentUrl());
// Wait until page is loaded, then click Starlink-15 (v1.0) to book the trip
await driver.wait(until.elementLocated(By.xpath("/html/body/div/div[2]/a[1]")), 30000);
await driver.findElement(By.xpath("/html/body/div/div[2]/a[1]")).click();


// Wait until page is loaded then add to cart
await driver.wait(until.elementLocated(By.xpath("//button[@class='css-wwcn44']")), 30000);
await driver.executeScript("window.scrollBy(0,1000)");
await driver.findElement(By.xpath("//button[@class='css-wwcn44']")).click();

// Go to the cart page
await driver.wait(until.elementsLocated(By.xpath("/html/body/div/footer/div/a[2]")), 60000);
await driver.findElement(By.xpath("/html/body/div/footer/div/a[2]")).click();
// Book the trip
await driver.wait(until.elementLocated(By.xpath("/html/body/div/div[2]/button")), 60000);
let starlink = await driver.findElement(By.xpath("/html/body/div/div[2]/a"));
assert(starlink != null)
let bookAllButton = await driver.findElement(By.xpath("/html/body/div/div[2]/button"));
assert.equal(await bookAllButton.getText(), "BOOK ALL");
await driver.findElement(By.xpath("/html/body/div/div[2]/button")).click();

// Go back to Profile Page and check your trip
await driver.navigate().refresh();
await driver.wait(until.elementLocated(By.xpath("/html/body/div/footer/div/a[3]")), 1000000);
await driver.findElement(By.xpath("/html/body/div/footer/div/a[3]")).click();

await driver.wait(until.elementsLocated(By.xpath("/html/body/div/div[2]/a")),60000);
let bookedTrip= await driver.findElement(By.xpath("/html/body/div/div[2]/a"));
console.log(await bookedTrip.getText());
console.log("Your trip is booked successfully,Test Passed!!");
await driver.navigate().refresh();


}finally{

await driver.quit();
}
}
profilePagetest();
30 changes: 30 additions & 0 deletions SeleniumTests/cart_page_test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
require("chromedriver");
let assert = require("assert");
const { watch } = require("fs");
const {Builder, By, Key, util, Browser, until} = require("selenium-webdriver");
let driver = new Builder().forBrowser("chrome").build();

async function cartPagetest(){
try{
await driver.get("http://localhost:3000");
// Logging in wiht email
await driver.findElement(By.name("email")).sendKeys('test@email.com');
await driver.findElement(By.xpath("/html/body/div/div/form/button")).click();

// Testing Cart Button
await driver.wait(until.elementLocated(By.xpath("/html/body/div/footer/div/a[2]")), 300000);
let shoppingcartPage = await driver.findElement(By.xpath("/html/body/div/footer/div/a[2]")).getText();
assert.equal(shoppingcartPage,"CART")
console.log("Cart Page is working. Test Passed!");

// Checking if the Cart button leads to the correct page
await driver.findElement(By.xpath("/html/body/div/footer/div/a[2]")).click();
assert.equal(await driver.getCurrentUrl(),'http://localhost:3000/cart');
console.log("Test Passed", await driver.getCurrentUrl());

}finally{

await driver.quit();
}
}
cartPagetest();
23 changes: 23 additions & 0 deletions SeleniumTests/login_email_test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
const {Builder, By, Key, until, WebElement} = require("selenium-webdriver");
require("chromedriver");
let assert = require("assert");

async function addToCartSingle() {
let driver = await new Builder().forBrowser("chrome").build();
try {
await driver.get("http://localhost:3000/")
// Check page title
let title = await driver.getTitle();
assert.equal(title, "Launches");
// Login with email
await driver.findElement(By.name("email")).sendKeys("test_email@email.com");
await driver.findElement(By.xpath("/html/body/div/div/form/button")).click();
await driver.wait(until.elementLocated(By.xpath("/html/body/div/div[2]/div/div/h5")), 300000);
assert.equal(await driver.findElement(By.xpath("/html/body/div/div[2]/div/div/h5")).getText(), 'TEST_EMAIL@EMAIL.COM');
}
finally {
await driver.quit();
}
}
addToCartSingle();

48 changes: 48 additions & 0 deletions SeleniumTests/logout_test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
require("chromedriver");
let assert = require("assert");
const {Builder, By, Key, util, Browser, until} = require("selenium-webdriver");
let driver = new Builder().forBrowser("chrome").build();

async function logoutTest(){
try{
await driver.get("http://localhost:3000");
// Logging in wiht email
await driver.findElement(By.name("email")).sendKeys('test@email.com');
await driver.findElement(By.xpath("/html/body/div/div/form/button")).click();

// Testing Log Out Button
await driver.wait(until.elementLocated(By.xpath("/html/body/div/footer/div/button")), 300000);
let logoutPage = await driver.findElement(By.xpath("/html/body/div/footer/div/button"))
.getText()
.then(async function(value){
return value;

})
if(logoutPage == "LOGOUT"){
console.log("Test Passed");
}

// Logging out
await driver.findElement(By.xpath("/html/body/div/footer/div/button")).click();

// Checking suscessfully Logout or not
await driver.findElement(By.xpath("/html/body/div/div/form/button"));
let loginPage = await driver.findElement(By.xpath("/html/body/div/div/form/button"))
.getText()
.then(async function(value){
return value;

});
if(loginPage == "LOG IN"){
console.log("Test Passed");
}
}catch(e){

console.log('Test Failed', e);

}finally{

await driver.quit();
}
}
logoutTest();
41 changes: 41 additions & 0 deletions SeleniumTests/main_menu_test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
require("chromedriver");
let assert = require("assert");
const {Builder, By, Key, util, Browser, until} = require("selenium-webdriver");
let driver = new Builder().forBrowser("chrome").build();

async function homePagetest(){
try{
await driver.get("http://localhost:3000");
// Logging in wiht email
await driver.findElement(By.name("email")).sendKeys('test@email.com');
await driver.findElement(By.xpath("/html/body/div/div/form/button")).click();

// Testing Home Button
await driver.wait(until.elementLocated(By.xpath("/html/body/div/footer/div/a[1]")), 300000);
let homePage = await driver.findElement(By.xpath("/html/body/div/footer/div/a[1]")).getText();

assert.equal(homePage,"HOME")
console.log("Test Passed!!Home button works correctly.");

// Testing "LoadMore" Button
await driver.wait(until.elementsLocated(By.xpath("//button[@class='css-wwcn44']"), 300000));
await driver.executeScript("window.scrollTo(0,document.body.scrollHeight)");
// Wait unitl page is loaded, then click "LOAD MORE"
await driver.findElement(By.xpath("//button[@class='css-wwcn44']")).click();
await driver.wait(until.elementsLocated(By.xpath("/html/body/div/div[2]/button"), 300000));
let element = await driver.findElement(By.xpath("/html/body/div/div[2]/button"));
assert.equal(await element.getText(),"LOAD MORE");
console.log("Click on ",await element.getText()," Button");

// Loading more lists of upcoming lunches
await driver.wait(until.elementLocated(By.xpath("/html/body/div/div[2]/a[28]")), 300000);
let loadPass= await driver.findElement(By.xpath("/html/body/div/div[2]/a[28]"));
console.log(await loadPass.getText());
console.log("Home page loaded correctly,Test Passed!!");

}finally{

await driver.quit();
}
}
homePagetest();
Loading