mirror of
https://github.com/scratchfoundation/scratch-www.git
synced 2024-11-27 09:35:56 -05:00
Merge pull request #4489 from LLK/release/2020-10-07
[Master] Release Oct 7 2020
This commit is contained in:
commit
8b6a4dd8fa
8 changed files with 115 additions and 67 deletions
|
@ -141,6 +141,6 @@ stages:
|
||||||
- name: test
|
- name: test
|
||||||
if: type != cron
|
if: type != cron
|
||||||
- name: smoke
|
- name: smoke
|
||||||
if: type NOT IN (cron, pull_request)
|
if: type NOT IN (cron, pull_request) AND (branch =~ /^(develop|master|release\/|hotfix\/)/)
|
||||||
- name: update translations
|
- name: update translations
|
||||||
if: branch == develop AND type == cron
|
if: branch == develop AND type == cron
|
||||||
|
|
52
package-lock.json
generated
52
package-lock.json
generated
|
@ -4128,9 +4128,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"caniuse-lite": {
|
"caniuse-lite": {
|
||||||
"version": "1.0.30001140",
|
"version": "1.0.30001144",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001140.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001144.tgz",
|
||||||
"integrity": "sha512-xFtvBtfGrpjTOxTpjP5F2LmN04/ZGfYV8EQzUIC/RmKpdrmzJrjqlJ4ho7sGuAMPko2/Jl08h7x9uObCfBFaAA==",
|
"integrity": "sha512-4GQTEWNMnVZVOFG3BK0xvGeaDAtiPAbG2N8yuMXuXzx/c2Vd4XoMPO8+E918zeXn5IF0FRVtGShBfkfQea2wHQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"canvas-toBlob": {
|
"canvas-toBlob": {
|
||||||
|
@ -17607,9 +17607,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scratch-blocks": {
|
"scratch-blocks": {
|
||||||
"version": "0.1.0-prerelease.20200923031615",
|
"version": "0.1.0-prerelease.20201007031713",
|
||||||
"resolved": "https://registry.npmjs.org/scratch-blocks/-/scratch-blocks-0.1.0-prerelease.20200923031615.tgz",
|
"resolved": "https://registry.npmjs.org/scratch-blocks/-/scratch-blocks-0.1.0-prerelease.20201007031713.tgz",
|
||||||
"integrity": "sha512-CXKQ9+lfumfIGTyWHpx/SI19NfSVHQX3FKq4dj/BIlHpUdxh/utyj6c1K+5a0g7eIF/gWZ+EyhL2GiXrlnWc9Q==",
|
"integrity": "sha512-94MaPUOcOEGE9lcUxgRtJG/g8I4E6GCtfCcxBlBL/yUHWDYs2AInbBRbHOL/GLZHEjyYLIjqW5NapWAlwBMKkA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"exports-loader": "0.6.3",
|
"exports-loader": "0.6.3",
|
||||||
|
@ -17617,9 +17617,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scratch-gui": {
|
"scratch-gui": {
|
||||||
"version": "0.1.0-prerelease.20200929205858",
|
"version": "0.1.0-prerelease.20201007191300",
|
||||||
"resolved": "https://registry.npmjs.org/scratch-gui/-/scratch-gui-0.1.0-prerelease.20200929205858.tgz",
|
"resolved": "https://registry.npmjs.org/scratch-gui/-/scratch-gui-0.1.0-prerelease.20201007191300.tgz",
|
||||||
"integrity": "sha512-6WBNI8BmSa+i136EL0MKH0CgVDxaUZXYiJyXJJVla7Tfq+wfdq4Sj31Bl0QmaHJaxxSXmZxos0W7n5qRUCVzfg==",
|
"integrity": "sha512-u+TBIH+JW2YnIJVYBbf260yQIGrbbYLnwI0YXCZjRJ8lrQKzFztp5yiisM2P1mSsnb1wdwsbIaNDVYVt+sZ9mw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"arraybuffer-loader": "^1.0.6",
|
"arraybuffer-loader": "^1.0.6",
|
||||||
|
@ -17670,8 +17670,8 @@
|
||||||
"redux": "3.7.2",
|
"redux": "3.7.2",
|
||||||
"redux-throttle": "0.1.1",
|
"redux-throttle": "0.1.1",
|
||||||
"scratch-audio": "0.1.0-prerelease.20200528195344",
|
"scratch-audio": "0.1.0-prerelease.20200528195344",
|
||||||
"scratch-blocks": "0.1.0-prerelease.20200923031615",
|
"scratch-blocks": "0.1.0-prerelease.20201007031713",
|
||||||
"scratch-l10n": "3.10.20200923030814",
|
"scratch-l10n": "3.10.20201007030856",
|
||||||
"scratch-paint": "0.2.0-prerelease.20200831213104",
|
"scratch-paint": "0.2.0-prerelease.20200831213104",
|
||||||
"scratch-render": "0.1.0-prerelease.20200827214414",
|
"scratch-render": "0.1.0-prerelease.20200827214414",
|
||||||
"scratch-storage": "1.3.3",
|
"scratch-storage": "1.3.3",
|
||||||
|
@ -17872,9 +17872,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"electron-to-chromium": {
|
"electron-to-chromium": {
|
||||||
"version": "1.3.576",
|
"version": "1.3.578",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.576.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.578.tgz",
|
||||||
"integrity": "sha512-uSEI0XZ//5ic+0NdOqlxp0liCD44ck20OAGyLMSymIWTEAtHKVJi6JM18acOnRgUgX7Q65QqnI+sNncNvIy8ew==",
|
"integrity": "sha512-z4gU6dA1CbBJsAErW5swTGAaU2TBzc2mPAonJb00zqW1rOraDo2zfBMDRvaz9cVic+0JEZiYbHWPw/fTaZlG2Q==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"file-loader": {
|
"file-loader": {
|
||||||
|
@ -18165,18 +18165,6 @@
|
||||||
"integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
|
"integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"scratch-l10n": {
|
|
||||||
"version": "3.10.20200923030814",
|
|
||||||
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.10.20200923030814.tgz",
|
|
||||||
"integrity": "sha512-dx+FRI4/DiKcC2DwVspqbhYlK6xAOLTSljF59lTOSLGlJiUPH9C1Z5RW1IkECgZcc8kH85f8jEPe+nknI5hNwQ==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@babel/cli": "^7.1.2",
|
|
||||||
"@babel/core": "^7.1.2",
|
|
||||||
"babel-plugin-react-intl": "^3.0.1",
|
|
||||||
"transifex": "1.6.6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"scratch-storage": {
|
"scratch-storage": {
|
||||||
"version": "1.3.3",
|
"version": "1.3.3",
|
||||||
"resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-1.3.3.tgz",
|
"resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-1.3.3.tgz",
|
||||||
|
@ -18250,9 +18238,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scratch-l10n": {
|
"scratch-l10n": {
|
||||||
"version": "3.10.20200930030848",
|
"version": "3.10.20201007030856",
|
||||||
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.10.20200930030848.tgz",
|
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.10.20201007030856.tgz",
|
||||||
"integrity": "sha512-le0rADSsH4Tw30XjcQF3IcQ1VKcpB/KFRUUT2Uo8/y5az0G3cf4ksL7mo8qu2AO47EGOLC/Mrztt6neaYVN86Q==",
|
"integrity": "sha512-VEOh3az+rU7GNi5rpG2n4kp75DMi+B/YBrEt4N6/tYl02XY2AF6PK1vsaRgq7zR0SZ+mIBDiAG2iYjtEAh3fsQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/cli": "^7.1.2",
|
"@babel/cli": "^7.1.2",
|
||||||
|
@ -19342,9 +19330,9 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"acorn": {
|
"acorn": {
|
||||||
"version": "7.4.0",
|
"version": "7.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
|
||||||
"integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==",
|
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"duplexer2": {
|
"duplexer2": {
|
||||||
|
|
|
@ -128,7 +128,7 @@
|
||||||
"redux-mock-store": "^1.2.3",
|
"redux-mock-store": "^1.2.3",
|
||||||
"redux-thunk": "2.0.1",
|
"redux-thunk": "2.0.1",
|
||||||
"sass-loader": "6.0.6",
|
"sass-loader": "6.0.6",
|
||||||
"scratch-gui": "0.1.0-prerelease.20200929205858",
|
"scratch-gui": "0.1.0-prerelease.20201007191300",
|
||||||
"scratch-l10n": "latest",
|
"scratch-l10n": "latest",
|
||||||
"selenium-webdriver": "3.6.0",
|
"selenium-webdriver": "3.6.0",
|
||||||
"slick-carousel": "1.6.0",
|
"slick-carousel": "1.6.0",
|
||||||
|
|
|
@ -114,7 +114,7 @@ const InstallScratch = ({
|
||||||
<span className="step-description">
|
<span className="step-description">
|
||||||
{currentOS === OS_ENUM.WINDOWS ?
|
{currentOS === OS_ENUM.WINDOWS ?
|
||||||
<FormattedMessage id="download.winMoveToApplications" /> :
|
<FormattedMessage id="download.winMoveToApplications" /> :
|
||||||
<FormattedMessage id="download.macMoveToApplications" />
|
<FormattedMessage id="download.macMoveAppToApplications" />
|
||||||
}
|
}
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
"download.scratch2Desktop" : "Scratch 2.0 Offline Editor",
|
"download.scratch2Desktop" : "Scratch 2.0 Offline Editor",
|
||||||
"download.cannotAccessMacStore" : "What if I can't access the Mac App Store?",
|
"download.cannotAccessMacStore" : "What if I can't access the Mac App Store?",
|
||||||
"download.cannotAccessWindowsStore" : "What if I can't access the Microsoft Store?",
|
"download.cannotAccessWindowsStore" : "What if I can't access the Microsoft Store?",
|
||||||
|
"download.macMoveAppToApplications": "Open the .dmg file. Move Scratch 3 into Applications.",
|
||||||
"download.macMoveToApplications" : "Open the .dmg file. Move Scratch Desktop into Applications.",
|
"download.macMoveToApplications" : "Open the .dmg file. Move Scratch Desktop into Applications.",
|
||||||
"download.winMoveToApplications" : "Run the .exe file.",
|
"download.winMoveToApplications" : "Run the .exe file.",
|
||||||
"download.doIHaveToDownload" : "Do I have to download an app to use Scratch?",
|
"download.doIHaveToDownload" : "Do I have to download an app to use Scratch?",
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 148 KiB |
|
@ -1,32 +0,0 @@
|
||||||
const SeleniumHelper = require('../selenium-helpers.js');
|
|
||||||
const helper = new SeleniumHelper();
|
|
||||||
|
|
||||||
var tap = require('tap');
|
|
||||||
const test = tap.test;
|
|
||||||
|
|
||||||
const driver = helper.buildDriver('www-smoke test-login-failures');
|
|
||||||
|
|
||||||
const {
|
|
||||||
clickText,
|
|
||||||
findByXpath
|
|
||||||
} = helper;
|
|
||||||
|
|
||||||
var rootUrl = process.env.ROOT_URL || 'https://scratch.ly';
|
|
||||||
|
|
||||||
tap.plan(1);
|
|
||||||
|
|
||||||
tap.tearDown(function () {
|
|
||||||
driver.quit();
|
|
||||||
});
|
|
||||||
|
|
||||||
tap.beforeEach(function () {
|
|
||||||
return driver.get(rootUrl);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Skipping this test while launching new join flow.
|
|
||||||
// TODO: Add new smoke tests for the new Join flow!
|
|
||||||
test('Clicking Join Scratch opens scratchr2 iframe', {skip: true}, t => {
|
|
||||||
clickText('Join Scratch')
|
|
||||||
.then(() => findByXpath('//iframe[contains(@class, "mod-registration")]'))
|
|
||||||
.then(() => t.end());
|
|
||||||
});
|
|
91
test/integration/join.test.js
Normal file
91
test/integration/join.test.js
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
const SeleniumHelper = require('./selenium-helpers.js');
|
||||||
|
|
||||||
|
const {
|
||||||
|
findByXpath,
|
||||||
|
clickXpath,
|
||||||
|
buildDriver
|
||||||
|
} = new SeleniumHelper();
|
||||||
|
|
||||||
|
let remote = process.env.SMOKE_REMOTE || false;
|
||||||
|
let rootUrl = process.env.ROOT_URL || 'https://scratch.ly';
|
||||||
|
let takenUsername = process.env.SMOKE_USERNAME;
|
||||||
|
|
||||||
|
if (remote){
|
||||||
|
jest.setTimeout(60000);
|
||||||
|
} else {
|
||||||
|
jest.setTimeout(10000);
|
||||||
|
}
|
||||||
|
|
||||||
|
let driver;
|
||||||
|
|
||||||
|
describe('www-integration join flow', () => {
|
||||||
|
beforeAll(async () => {
|
||||||
|
driver = await buildDriver('www-integration join flow');
|
||||||
|
await driver.get(rootUrl);
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(async () => await driver.quit());
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
driver.get(rootUrl);
|
||||||
|
await clickXpath('//a[@class="registrationLink"]');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('click Join opens join modal', async () => {
|
||||||
|
let joinModal = await findByXpath('//div[@class = "join-flow-outer-content"]');
|
||||||
|
let modalVisible = await joinModal.isDisplayed();
|
||||||
|
await expect(modalVisible).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('username validation message appears', async () => {
|
||||||
|
await clickXpath('//input[contains(@name, "username")]');
|
||||||
|
let message = await findByXpath('//div[contains(@class, "validation-message")]');
|
||||||
|
let messageText = await message.getText();
|
||||||
|
await expect(messageText).toEqual('Don\'t use your real name');
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
test('password validation message appears', async () => {
|
||||||
|
await clickXpath('//input[contains(@name, "password")]');
|
||||||
|
let message = await findByXpath('//div[contains(@class, "validation-message")]');
|
||||||
|
let messageText = await message.getText();
|
||||||
|
await expect(messageText).toContain('Write it down so you remember.');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('password validation message appears', async () => {
|
||||||
|
await clickXpath('//input[contains(@name, "passwordConfirm")]');
|
||||||
|
let message = await findByXpath('//div[contains(@class, "validation-message")]');
|
||||||
|
let messageText = await message.getText();
|
||||||
|
await expect(messageText).toEqual('Type password again');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('username validation: too short', async () => {
|
||||||
|
let textInput = await findByXpath('//input[contains(@name, "username")]');
|
||||||
|
await textInput.click();
|
||||||
|
await textInput.sendKeys('ab');
|
||||||
|
await clickXpath('//div[@class = "join-flow-outer-content"]');
|
||||||
|
let message = await findByXpath('//div[contains(@class, "validation-error")]');
|
||||||
|
let messageText = await message.getText();
|
||||||
|
await expect(messageText).toContain('Must be 3 letters or longer');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('username validation: username taken', async () => {
|
||||||
|
let textInput = await findByXpath('//input[contains(@name, "username")]');
|
||||||
|
await textInput.click();
|
||||||
|
await textInput.sendKeys(takenUsername);
|
||||||
|
await clickXpath('//div[@class = "join-flow-outer-content"]');
|
||||||
|
let message = await findByXpath('//div[contains(@class, "validation-error")]');
|
||||||
|
let messageText = await message.getText();
|
||||||
|
await expect(messageText).toContain('Username taken.');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('username validation: bad word', async () => {
|
||||||
|
let textInput = await findByXpath('//input[contains(@name, "username")]');
|
||||||
|
await textInput.click();
|
||||||
|
await textInput.sendKeys('qnb02mclepghwic9');
|
||||||
|
await clickXpath('//div[@class = "join-flow-outer-content"]');
|
||||||
|
let message = await findByXpath('//div[contains(@class, "validation-error")]');
|
||||||
|
let messageText = await message.getText();
|
||||||
|
await expect(messageText).toContain('Username not allowed');
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in a new issue