mirror of
https://github.com/scratchfoundation/scratch-www.git
synced 2025-03-23 19:30:34 -04:00
Add integration tests leaving comments on projects, studios, and profiles
This commit is contained in:
parent
9d685973e7
commit
f011258c0a
1 changed files with 124 additions and 0 deletions
124
test/integration/comments.test.js
Normal file
124
test/integration/comments.test.js
Normal file
|
@ -0,0 +1,124 @@
|
|||
// These tests sign in with user #4 and user #5
|
||||
|
||||
import SeleniumHelper from './selenium-helpers.js';
|
||||
|
||||
const {
|
||||
findByXpath,
|
||||
buildDriver,
|
||||
clickXpath,
|
||||
clickText,
|
||||
signIn
|
||||
} = new SeleniumHelper();
|
||||
|
||||
// Using 1 and 2 here. Hopefully this is not confusing.
|
||||
let username1 = process.env.SMOKE_USERNAME + '4';
|
||||
let username2 = process.env.SMOKE_USERNAME + '5';
|
||||
let password = process.env.SMOKE_PASSWORD;
|
||||
|
||||
let remote = process.env.SMOKE_REMOTE || false;
|
||||
let rootUrl = process.env.ROOT_URL || 'https://scratch.ly';
|
||||
|
||||
// project for comments (owned by username2)
|
||||
let projectId = process.env.COMMENT_PROJECT_ID || 1300008409;
|
||||
let projectUrl = `${rootUrl}/projects/${projectId}`;
|
||||
|
||||
// profile for comments (username2)
|
||||
let profileUrl = `${rootUrl}/users/${username2}`;
|
||||
|
||||
// studio for comments (hosted by username2) comments tab
|
||||
let studioId = process.env.COMMENT_STUDIO_ID || 10005646;
|
||||
let studioUrl = `${rootUrl}/studios/${studioId}/comments`;
|
||||
|
||||
let date = new Date();
|
||||
let dateString = `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()} ` +
|
||||
`${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`;
|
||||
let buildNumber = process.env.CIRCLE_BUILD_NUM || dateString;
|
||||
|
||||
if (remote) {
|
||||
jest.setTimeout(60000);
|
||||
} else {
|
||||
jest.setTimeout(20000);
|
||||
}
|
||||
|
||||
let driver;
|
||||
|
||||
describe('comment tests', async () => {
|
||||
beforeAll(async () => {
|
||||
driver = await buildDriver('www-integration project comments');
|
||||
driver.get(rootUrl);
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
await clickXpath('//a[contains(@class, "user-info")]');
|
||||
await clickText('Sign out');
|
||||
});
|
||||
|
||||
afterAll(async () => await driver.quit());
|
||||
|
||||
test('leave comment on project', async () => {
|
||||
await signIn(username1, password, driver);
|
||||
await findByXpath('//span[contains(@class, "profile-name")]');
|
||||
await driver.get(projectUrl);
|
||||
|
||||
// leave the comment
|
||||
let commentBox = await findByXpath('//textArea[@name="compose-comment"]');
|
||||
await commentBox.sendKeys(buildNumber);
|
||||
await findByXpath(`//textarea[contains(text(), "${buildNumber}")]`);
|
||||
await clickXpath('//button[@class="button compose-post"]');
|
||||
|
||||
// reload the page
|
||||
await driver.sleep(5000);
|
||||
await driver.get(projectUrl);
|
||||
|
||||
// find the comment
|
||||
let commentXpath = await `//div[@class="comment-bubble"]/span/span[contains(text(), "${buildNumber}")]`;
|
||||
let postedComment = await findByXpath(commentXpath);
|
||||
let commentVisible = await postedComment.isDisplayed();
|
||||
await expect(commentVisible).toBe(true);
|
||||
});
|
||||
|
||||
test('leave comment on a profile', async () => {
|
||||
await signIn(username1, password, driver);
|
||||
await findByXpath('//span[contains(@class, "profile-name")]');
|
||||
await driver.get(profileUrl);
|
||||
|
||||
// leave the comment
|
||||
let commentXpath = await '//form[@id="main-post-form"]/div/textArea';
|
||||
let commentArea = await findByXpath(commentXpath);
|
||||
await commentArea.sendKeys(buildNumber);
|
||||
await clickXpath('//div[@class="button small"]/a[contains(text(), "Post")]');
|
||||
|
||||
// reload page
|
||||
await driver.get(profileUrl);
|
||||
|
||||
// find the comment
|
||||
let newComment = await findByXpath(`//div[@class="comment "]/div/div[contains(text(), "${buildNumber}")]`);
|
||||
let commentVisible = await newComment.isDisplayed();
|
||||
await expect(commentVisible).toBe(true);
|
||||
|
||||
// return to homepage to sign out with www
|
||||
await driver.get(rootUrl);
|
||||
});
|
||||
|
||||
test('leave comment on studio', async () => {
|
||||
await signIn(username1, password, driver);
|
||||
await findByXpath('//span[contains(@class, "profile-name")]');
|
||||
await driver.get(studioUrl);
|
||||
|
||||
// leave the comment
|
||||
let commentBox = await findByXpath('//textArea[@name="compose-comment"]');
|
||||
await commentBox.sendKeys(buildNumber);
|
||||
await findByXpath(`//textarea[contains(text(), "${buildNumber}")]`);
|
||||
await clickXpath('//button[@class="button compose-post"]');
|
||||
|
||||
// reload the page
|
||||
await driver.sleep(5000);
|
||||
await driver.get(studioUrl);
|
||||
|
||||
// find the comment
|
||||
let commentXpath = `//div[@class="comment-bubble"]/span/span[contains(text(), "${buildNumber}")]`;
|
||||
let postedComment = await findByXpath(commentXpath);
|
||||
let commentVisible = await postedComment.isDisplayed();
|
||||
await expect(commentVisible).toBe(true);
|
||||
});
|
||||
});
|
Loading…
Add table
Reference in a new issue