From 9cc805f42c894be37dd8ecec14a454aecc5b3aa2 Mon Sep 17 00:00:00 2001
From: BryceLTaylor <brycet@media.mit.edu>
Date: Fri, 29 Apr 2022 15:32:33 -0400
Subject: [PATCH] Add tests that attempt to load shared and unshared projects

---
 test/integration/project-page.test.js | 92 +++++++++++++++++++++++++--
 1 file changed, 87 insertions(+), 5 deletions(-)

diff --git a/test/integration/project-page.test.js b/test/integration/project-page.test.js
index e2dcf428c..6c07bbd20 100644
--- a/test/integration/project-page.test.js
+++ b/test/integration/project-page.test.js
@@ -1,4 +1,5 @@
 // These tests do not sign in with a user
+// Adding tests that sign in with user #6
 
 const SeleniumHelper = require('./selenium-helpers.js');
 
@@ -6,12 +7,27 @@ const {
     buildDriver,
     clickXpath,
     findByXpath,
+    signIn,
     waitUntilVisible
 } = new SeleniumHelper();
 
 let rootUrl = process.env.ROOT_URL || 'https://scratch.ly';
-let projectId = process.env.TEST_PROJECT_ID || 1300006196;
-let projectUrl = rootUrl + '/projects/' + projectId;
+
+// project IDs and URLs
+let unownedSharedId = process.env.UNOWNED_SHARED_PROJECT_ID || 1300006196;
+let unownedSharedUrl = rootUrl + '/projects/' + unownedSharedId;
+
+let ownedSharedId = process.env.OWNED_SHARED_PROJECT_ID || 1300009464;
+let ownedSharedUrl = rootUrl + '/projects/' + ownedSharedId;
+
+let ownedUnsharedID = process.env.OWNED_UNSHARED_PROJECT_ID || 1300009465;
+let ownedUnsharedUrl = rootUrl + '/projects/' + ownedUnsharedID;
+
+let unownedUnsharedID = process.env.UNOWNED_UNSHARED_PROJECT_ID || 1300006306;
+let unownedUnsharedUrl = rootUrl + '/projects/' + unownedUnsharedID;
+
+let username = process.env.SMOKE_USERNAME + '6';
+let password = process.env.SMOKE_PASSWORD;
 
 jest.setTimeout(60000);
 
@@ -25,7 +41,7 @@ describe('www-integration project-page signed out', () => {
     });
 
     beforeEach(async () => {
-        await driver.get(projectUrl);
+        await driver.get(unownedSharedUrl);
         let gfOverlay = await findByXpath('//div[@class="stage-wrapper_stage-wrapper_2bejr box_box_2jjDp"]');
         await waitUntilVisible(gfOverlay, driver);
     });
@@ -46,7 +62,7 @@ describe('www-integration project-page signed out', () => {
         await clickXpath('//button[@class="button action-button copy-link-button"]');
         let projectLink = await findByXpath('//input[@name="link"]');
         let linkValue = await projectLink.getAttribute('value');
-        await expect(linkValue).toEqual(projectUrl);
+        await expect(linkValue).toEqual(unownedSharedUrl);
     });
 
     test('Click Username to go to profile page', async ()=> {
@@ -67,6 +83,72 @@ describe('www-integration project-page signed out', () => {
         await clickXpath('//div[@class="list-header-link"]');
         let originalLink = await findByXpath('//h2/a');
         let link = await originalLink.getAttribute('href');
-        await expect(link).toEqual(rootUrl + '/projects/' + projectId + '/');
+        await expect(link).toEqual(rootUrl + '/projects/' + unownedSharedId + '/');
+    });
+
+    // Load an unshared project while signed out, get error
+    test('Load an ushared project you do not own (error)', async () => {
+        await driver.get(unownedUnsharedUrl);
+        let unavailableImage = await findByXpath('//img[@class="not-available-image"]');
+        await waitUntilVisible(unavailableImage, driver);
+        let unavailableVisible = await unavailableImage.isDisplayed();
+        await expect(unavailableVisible).toBe(true);
+    });
+});
+
+// Logged in tests
+
+describe('www-integration project-page signed in', () => {
+    beforeAll(async () => {
+        // expect(projectUrl).toBe(defined);
+        driver = await buildDriver('www-integration project-page signed in');
+        await driver.get(rootUrl);
+        await driver.sleep(1000);
+        await signIn(username, password);
+        await findByXpath('//span[contains(@class, "profile-name")]');
+    });
+
+    beforeEach(async () => {
+        await driver.get(rootUrl);
+    });
+
+    afterAll(async () => await driver.quit());
+
+    // LOGGED in TESTS
+
+    // Load a shared project you own
+    test('Load a shared project you own', async () => {
+        await driver.get(ownedSharedUrl);
+        let gfOverlay = await findByXpath('//div[@class="stage-wrapper_stage-wrapper_2bejr box_box_2jjDp"]');
+        await waitUntilVisible(gfOverlay, driver);
+        let gfVisible = await gfOverlay.isDisplayed();
+        await expect(gfVisible).toBe(true);
+    });
+
+    // Load a shared project you don't own
+    test('Load a shared project you do not own', async () => {
+        await driver.get(unownedSharedUrl);
+        let gfOverlay = await findByXpath('//div[@class="stage-wrapper_stage-wrapper_2bejr box_box_2jjDp"]');
+        await waitUntilVisible(gfOverlay, driver);
+        let gfVisible = await gfOverlay.isDisplayed();
+        await expect(gfVisible).toBe(true);
+    });
+
+    // Load an unshared project you own
+    test('Load a shared project you own', async () => {
+        await driver.get(ownedUnsharedUrl);
+        let gfOverlay = await findByXpath('//div[@class="stage-wrapper_stage-wrapper_2bejr box_box_2jjDp"]');
+        await waitUntilVisible(gfOverlay, driver);
+        let gfVisible = await gfOverlay.isDisplayed();
+        await expect(gfVisible).toBe(true);
+    });
+
+    // Load an unshared project you don't own, get error
+    test('Load an ushared project you do not own (error)', async () => {
+        await driver.get(unownedUnsharedUrl);
+        let unavailableImage = await findByXpath('//img[@class="not-available-image"]');
+        await waitUntilVisible(unavailableImage, driver);
+        let unavailableVisible = await unavailableImage.isDisplayed();
+        await expect(unavailableVisible).toBe(true);
     });
 });