diff --git a/.circleci/config.yml b/.circleci/config.yml index 4e484c905d..69639023a5 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -322,7 +322,7 @@ jobs: executor: name: default-executor resource_class: medium - parallelism: 5 + parallelism: 4 steps: - custom_attach_workspace - init_environment @@ -330,9 +330,9 @@ jobs: # Install aio - run: yarn --cwd aio install --frozen-lockfile --non-interactive # Run examples tests. The "CIRCLE_NODE_INDEX" will be set if "parallelism" is enabled. - # Since the parallelism is set to "5", there will be five parallel CircleCI containers. + # Since the parallelism is set to "4", there will be four parallel CircleCI containers. # with either "0", "1", etc as node index. This can be passed to the "--shard" argument. - - run: yarn --cwd aio example-e2e --setup --local <<# parameters.viewengine >>--viewengine<> --cliSpecsConcurrency=5 --shard=${CIRCLE_NODE_INDEX}/${CIRCLE_NODE_TOTAL} --retry 2 + - run: yarn --cwd aio example-e2e --setup --local <<# parameters.viewengine >>--viewengine<> --cliSpecsConcurrency=4 --shard=${CIRCLE_NODE_INDEX}/${CIRCLE_NODE_TOTAL} --retry 2 # This job should only be run on PR builds, where `CI_PULL_REQUEST` is not `false`. aio_preview: diff --git a/aio/package.json b/aio/package.json index dae013c854..60959a2852 100644 --- a/aio/package.json +++ b/aio/package.json @@ -93,7 +93,7 @@ "@angular/compiler": "10.0.2", "@angular/core": "10.0.2", "@angular/elements": "10.0.2", - "@angular/fire": "6.0.0", + "@angular/fire": "~6.0.3", "@angular/forms": "10.0.2", "@angular/material": "10.0.1", "@angular/platform-browser": "10.0.2", diff --git a/aio/scripts/deploy-to-firebase.test.sh b/aio/scripts/deploy-to-firebase.test.sh index 8f4efebc72..a96537188c 100755 --- a/aio/scripts/deploy-to-firebase.test.sh +++ b/aio/scripts/deploy-to-firebase.test.sh @@ -146,32 +146,6 @@ Deployment URL : https://v2.angular.io/" check "$actual" "$expected" ) -( - echo ===== archive - v9-angular-io multisite special case - deploy success - actual=$( - export BASH_ENV=/dev/null - export CI_REPO_OWNER=angular - export CI_REPO_NAME=angular - export CI_PULL_REQUEST=false - export CI_BRANCH=9.1.x - export CI_STABLE_BRANCH=10.0.x - export CI_COMMIT=$(git ls-remote origin 9.1.x | cut -c1-40) - export CI_SECRET_AIO_DEPLOY_FIREBASE_TOKEN=XXXXX - $deployToFirebaseDryRun - ) - expected="Git branch : 9.1.x -Build/deploy mode : archive -Firebase project : aio-staging -Firebase site : v9-angular-io -Deployment URL : https://v9.angular.io/" - # TODO: This test incorrectly expects the Firebase project to be v9-angular-io. - # v9-angular-io is a "multisites" project currently within the aio-staging project - # This setup is temporary and was created in order to deploy v9.angular.io without - # disruptions. - # See https://angular-team.atlassian.net/browse/DEV-125 for more info. - check "$actual" "$expected" -) - ( echo ===== archive - skip deploy - commit not HEAD actual=$( diff --git a/aio/tests/e2e/src/app.e2e-spec.ts b/aio/tests/e2e/src/app.e2e-spec.ts index 4876cc9525..73f6c0532c 100644 --- a/aio/tests/e2e/src/app.e2e-spec.ts +++ b/aio/tests/e2e/src/app.e2e-spec.ts @@ -75,7 +75,7 @@ describe('site App', function() { it('should show the tutorial index page at `/tutorial` after jitterbugging through features', () => { // check that we can navigate directly to the tutorial page page.navigateTo('tutorial'); - expect(page.getDocViewerText()).toMatch(/Tour of Heroes App and Tutorial/i); + expect(page.getDocViewerText()).toMatch(/Aplicación y tutorial Tour de héroes/i); // navigate to a different page page.click(page.getTopMenuLink('features')); @@ -86,8 +86,8 @@ describe('site App', function() { // Tutorial folder should still be expanded because this test runs in wide mode // Navigate to the tutorial introduction via a link in the sidenav - page.click(page.getNavItem(/The Hero Editor/i)); - expect(page.getDocViewerText()).toMatch(/The Hero Editor/i); + page.click(page.getNavItem(/El Editor de Héroe/i)); + expect(page.getDocViewerText()).toMatch(/The hero editor/i); }); it('should render `{@example}` dgeni tags as `` elements with HTML escaped content', () => { @@ -114,7 +114,7 @@ describe('site App', function() { page.scrollTo('bottom'); expect(page.getScrollTop()).toBeGreaterThan(0); - page.click(page.getNavItem(/security/i)); + page.click(page.getNavItem(/Seguridad/i)); expect(page.locationPath()).toBe('/guide/security'); expect(page.getScrollTop()).toBe(0); }); @@ -173,38 +173,6 @@ describe('site App', function() { }); }); - describe('google analytics', () => { - - it('should call ga with initial URL', done => { - let path: string; - page.navigateTo('api'); - page.locationPath() - .then(p => path = p) - .then(() => page.ga()) - .then(calls => { - // The last call (length-1) will be the `send` command - // The second to last call (length-2) will be the command to `set` the page url - expect(calls[calls.length - 2]).toEqual(['set', 'page', path]); - done(); - }); - }); - - it('should call ga with new URL on navigation', done => { - let path: string; - page.navigateTo(''); - page.click(page.getTopMenuLink('features')); - page.locationPath() - .then(p => path = p) - .then(() => page.ga()) - .then(calls => { - // The last call (length-1) will be the `send` command - // The second to last call (length-2) will be the command to `set` the page url - expect(calls[calls.length - 2]).toEqual(['set', 'page', path]); - done(); - }); - }); - }); - describe('404 page', () => { it('should add or remove the "noindex" meta tag depending upon the validity of the page', () => { page.navigateTo(''); diff --git a/aio/tests/e2e/src/onerror.e2e-spec.ts b/aio/tests/e2e/src/onerror.e2e-spec.ts deleted file mode 100644 index 3b199a9c89..0000000000 --- a/aio/tests/e2e/src/onerror.e2e-spec.ts +++ /dev/null @@ -1,205 +0,0 @@ -import { browser } from 'protractor'; -import { SitePage } from './app.po'; - -/* tslint:disable:max-line-length */ - -describe('onerror handler', function() { - let page: SitePage; - - beforeAll(() => { - page = new SitePage(); - page.navigateTo(''); - }); - - - it('(called without an error object) should call ga with a payload based on the message, url, row and column arguments', async () => { - const message1 = await callOnError('Error: some error message', 'some-file.js', 12, 3, undefined); - expect(message1).toEqual('some error message\nsome-file.js:12:3'); - const message2 = await callOnError('Error: some error message', undefined, undefined, undefined, undefined); - expect(message2).toEqual('some error message\nnull:?:?'); - }); - - it('(called without an error object) should call ga with a payload that is no longer that 150 characters', async () => { - const message = await callOnError( - 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz' + - 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz', - 'some-file.js', 12, 3, undefined); - expect(message).toEqual( - 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz' + - 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst'); - }); - - it('(called with a Firefox on android style error) should call ga with a payload based on the error object', async () => { - const message = await callOnError('Error: something terrible has happened. oh no. oh no.', undefined, undefined, undefined, { - stack: `AppComponent@https://example.com/app/app.component.ts:31:29 -createClass@https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:12200:20 -createDirectiveInstance@https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:12049:37 -createViewNodes@https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:13487:53 -createRootView@https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:13377:5 -callWithDebugContext@https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:14778:39 -debugCreateRootView@https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:14079:12 -ComponentFactory_.prototype.create@https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:10998:37 -ComponentFactoryBoundToModule.prototype.create@https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:3958:16 -ApplicationRef.prototype.bootstrap@https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:5769:40 -PlatformRef.prototype._moduleDoBootstrap/<@https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:5496:74 -PlatformRef.prototype._moduleDoBootstrap@https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:5496:13 -PlatformRef.prototype.bootstrapModuleFactory/ { - const message = await callOnError('Error: something terrible has happened. oh no. oh no.', undefined, undefined, undefined, { - stack: `AppComponent - createClass - createDirectiveInstance - createViewNodes - createRootView - callWithDebugContext - create - bootstrap - forEach@[native code] - _moduleDoBootstrap - - onInvoke - run - - onInvokeTask - runTask - drainMicroTaskQueue - promiseReactionJob@[native code]` } as Error); - - expect(message).toEqual(`something terrible has happened. oh no. oh no. -AppComponent -createClass -createDirectiveInstance -createViewNodes -createRootView -callWithDebugContext -cr`); - }); - - it('(called with a Opera 50 style error) should call ga with a payload based on the error object', async () => { - const message = await callOnError('Error: something terrible has happened. oh no. oh no.', undefined, undefined, undefined, { - stack: `Error: something terrible has happened. oh no. oh no. - at new AppComponent (https://example.com/app/app.component.ts:31:29) - at createClass (https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:12200:20) - at createDirectiveInstance (https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:12049:37) - at createViewNodes (https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:13487:53) - at createRootView (https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:13377:5) - at callWithDebugContext (https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:14778:42) - at Object.debugCreateRootView [as createRootView] (https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:14079:12) - at ComponentFactory_.create (https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:10998:46) - at ComponentFactoryBoundToModule.create (https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:3958:29) - at ApplicationRef.bootstrap (https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:5769:57)` } as Error); - - expect(message).toEqual(`something terrible has happened. oh no. oh no. -new AppComponent@app.component.ts:31:29 -createClass@core.umd.js:12200:20 -createDirectiveInstance@core.u`); - }); - - it('(called with a Chrome 64 style error) should call ga with a payload based on the error object', async () => { - const message = await callOnError('Error: something terrible has happened. oh no. oh no.', undefined, undefined, undefined, { - stack: `Error: something terrible has happened. oh no. oh no. - at new AppComponent (https://example.com/app/app.component.ts:31:29) - at createClass (https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:12200:20) - at createDirectiveInstance (https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:12049:37) - at createViewNodes (https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:13487:53) - at createRootView (https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:13377:5) - at callWithDebugContext (https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:14778:42) - at Object.debugCreateRootView [as createRootView] (https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:14079:12) - at ComponentFactory_.create (https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:10998:46) - at ComponentFactoryBoundToModule.create (https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:3958:29) - at ApplicationRef.bootstrap (https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:5769:57)` } as Error); - - expect(message).toEqual(`something terrible has happened. oh no. oh no. -new AppComponent@app.component.ts:31:29 -createClass@core.umd.js:12200:20 -createDirectiveInstance@core.u`); - }); - - it('(called with a Firefox 58 style error) should call ga with a payload based on the error object', async () => { - const message = await callOnError('Error: something terrible has happened. oh no. oh no.', undefined, undefined, undefined, { - stack: `AppComponent@https://example.com/app/app.component.ts:31:29 -createClass@https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:12200:20 -createDirectiveInstance@https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:12049:37 -createViewNodes@https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:13487:53 -createRootView@https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:13377:5 -callWithDebugContext@https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:14778:39 -debugCreateRootView@https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:14079:12 -ComponentFactory_.prototype.create@https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:10998:37 -ComponentFactoryBoundToModule.prototype.create@https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:3958:16 -ApplicationRef.prototype.bootstrap@https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:5769:40 -PlatformRef.prototype._moduleDoBootstrap/<@https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:5496:74 -PlatformRef.prototype._moduleDoBootstrap@https://example.com/packages/@angular/core@5.0.0/bundles/core.umd.js:5496:13 -PlatformRef.prototype.bootstrapModuleFactory/ { - const message = await callOnError('Error: something terrible has happened. oh no. oh no.', undefined, undefined, undefined, { - stack: `Error: something terrible has happened. oh no. oh no. - at AppComponent (eval code:31:21) - at createClass (eval code:12200:13) - at createDirectiveInstance (eval code:12049:5) - at createViewNodes (eval code:13487:21) - at createRootView (eval code:13377:5) - at callWithDebugContext (eval code:14778:9) - at debugCreateRootView (eval code:14079:5) - at ComponentFactory_.prototype.create (eval code:10998:9) - at ComponentFactoryBoundToModule.prototype.create (eval code:3958:9) - at ApplicationRef.prototype.bootstrap (eval code:5769:9)` } as Error); - - expect(message).toEqual(`something terrible has happened. oh no. oh no. -AppComponent@???:31:21 -createClass@???:12200:13 -createDirectiveInstance@???:12049:5 -createViewNodes@???`); - }); - - async function callOnError(message: string, url?: string, line?: number, column?: number, error?: Error) { - await browser.executeScript(function() { - // reset the ga queue - (window as any).ga.q.length = 0; - // post the error to the handler - if (window.onerror) { - window.onerror(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]); - } - }, message, url, line, column, error); - const gaCalls = await page.ga(); - const exceptionCall = gaCalls.find(call => call[0] === 'send' && call[1] === 'exception'); - if (exceptionCall) { - const payload = exceptionCall[2]; - expect(payload.exFatal).toBe(true); - return payload.exDescription; - } - } -}); diff --git a/aio/yarn.lock b/aio/yarn.lock index 68b790d6c1..22211e6a0a 100644 --- a/aio/yarn.lock +++ b/aio/yarn.lock @@ -223,10 +223,12 @@ dependencies: tslib "^2.0.0" -"@angular/fire@6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@angular/fire/-/fire-6.0.0.tgz#c1dbae9e78ed74af951fb7222108c444300a4d15" - integrity sha512-zWhaJaZPtfJKiNSb1I3WqqvopW0fN3S61w4PjPdsm5WME+9M9alP0zpRVclpbCU26LpBSLhrRrSLyn3ROlAOIw== +"@angular/fire@~6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@angular/fire/-/fire-6.0.3.tgz#7e4e988409cfc22e3abd4085c7c4b7d6f8f2533a" + integrity sha512-teaPvVPEZA2ymHkaCyJC5KJbp+Ai5nLHsEVUXSJZRCUV8KTg/XOG/toNiATHtwxGgxrKRZ63pOfQFonZYT8TLw== + dependencies: + tslib "^2.0.0" "@angular/forms@10.0.2": version "10.0.2"