From 370748ce55af2cf63b46a641d7190910c621df5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Wed, 27 Feb 2019 15:14:45 +0100 Subject: [PATCH 01/65] Sketch cypress test to hide posts from the public --- cypress/integration/common/steps.js | 18 +++++++++++-- .../integration/moderation/HidePosts.feature | 27 +++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 cypress/integration/moderation/HidePosts.feature diff --git a/cypress/integration/common/steps.js b/cypress/integration/common/steps.js index c17c2729b..ccd6ac14f 100644 --- a/cypress/integration/common/steps.js +++ b/cypress/integration/common/steps.js @@ -151,7 +151,9 @@ When('I press {string}', label => { }) Given('we have the following posts in our database:', table => { - table.hashes().forEach(({ Author, id, title, content }) => { + table.hashes().forEach(({ Author, ...postAttributes}) => { + postAttributes.deleted = Boolean(postAttributes.deleted) + postAttributes.disabled = Boolean(postAttributes.disabled) cy.factory() .create('User', { name: Author, @@ -162,7 +164,7 @@ Given('we have the following posts in our database:', table => { email: `${Author}@example.org`, password: '1234' }) - .create('Post', { id, title, content }) + .create('Post', postAttributes) }) }) @@ -212,3 +214,15 @@ Then('the post was saved successfully', () => { cy.get('.ds-card-header > .ds-heading').should('contain', lastPost.title) cy.get('.content').should('contain', lastPost.content) }) + +Then(/^I should see only ([0-9]+) posts? on the landing page/, (postCount) => { + cy.get('.post-card').should('have.length', postCount) +}) + +Then('the first post on the landing page has the title:', (title) => { + cy.get('.post-card:first').should('contain', title) +}) + +Then('I see a 404 error with the following message:', (message) => { + cy.get('.error').should('contain', message) +}) diff --git a/cypress/integration/moderation/HidePosts.feature b/cypress/integration/moderation/HidePosts.feature new file mode 100644 index 000000000..6a11eaf3b --- /dev/null +++ b/cypress/integration/moderation/HidePosts.feature @@ -0,0 +1,27 @@ +Feature: Hide Posts + As the moderator team + we'd like to be able to hide posts from the public + to enforce our network's code of conduct and/or legal regulations + + Background: + Given we have the following posts in our database: + | title | deleted | disabled | + | This post should be visible | | | + | This post is disabled | | x | + | This post is deleted | x | | + + Scenario: Disabled posts don't show up on the landing page + Given I am logged in with a "user" role + Then I should see only 1 post on the landing page + And the first post on the landing page has the title: + """ + This post should be visible + """ + + Scenario: Visiting a disabled post's page should return 404 + Given I am logged in with a "user" role + When I visit the "/post/this-post-is-disabled" page + Then I see a 404 error with the following message: + """ + We cannot find that post :( + """ From 804cb796b8c3516363ceb4e593250442ecbde22b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Thu, 28 Feb 2019 02:09:36 +0100 Subject: [PATCH 02/65] Fix lint --- cypress/integration/common/steps.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cypress/integration/common/steps.js b/cypress/integration/common/steps.js index ccd6ac14f..dc43d1659 100644 --- a/cypress/integration/common/steps.js +++ b/cypress/integration/common/steps.js @@ -151,8 +151,8 @@ When('I press {string}', label => { }) Given('we have the following posts in our database:', table => { - table.hashes().forEach(({ Author, ...postAttributes}) => { - postAttributes.deleted = Boolean(postAttributes.deleted) + table.hashes().forEach(({ Author, ...postAttributes }) => { + postAttributes.deleted = Boolean(postAttributes.deleted) postAttributes.disabled = Boolean(postAttributes.disabled) cy.factory() .create('User', { @@ -215,14 +215,14 @@ Then('the post was saved successfully', () => { cy.get('.content').should('contain', lastPost.content) }) -Then(/^I should see only ([0-9]+) posts? on the landing page/, (postCount) => { +Then(/^I should see only ([0-9]+) posts? on the landing page/, postCount => { cy.get('.post-card').should('have.length', postCount) }) -Then('the first post on the landing page has the title:', (title) => { +Then('the first post on the landing page has the title:', title => { cy.get('.post-card:first').should('contain', title) }) -Then('I see a 404 error with the following message:', (message) => { +Then('I see a 404 error with the following message:', message => { cy.get('.error').should('contain', message) }) From eaa2017ba482f08e3893a320815eff62c1ac62d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Thu, 28 Feb 2019 02:49:54 +0100 Subject: [PATCH 03/65] This technically lets the cypress tests pass @appinteractive when I run the whole apollo request in `asyncData` I get errors that there is a mismatch of the virtual DOM trees for client and server. Any ideas? --- cypress/integration/common/steps.js | 11 ++++++++--- cypress/integration/moderation/HidePosts.feature | 3 +-- pages/post/_slug/index.vue | 16 ++++++++++++++++ 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/cypress/integration/common/steps.js b/cypress/integration/common/steps.js index dc43d1659..e2ab27ee6 100644 --- a/cypress/integration/common/steps.js +++ b/cypress/integration/common/steps.js @@ -223,6 +223,11 @@ Then('the first post on the landing page has the title:', title => { cy.get('.post-card:first').should('contain', title) }) -Then('I see a 404 error with the following message:', message => { - cy.get('.error').should('contain', message) -}) +Then( + 'the page {string} returns a 404 error with a message:', + (route, message) => { + // TODO: how can we check HTTP codes with cypress? + cy.visit(route, { failOnStatusCode: false }) + cy.get('.error').should('contain', message) + } +) diff --git a/cypress/integration/moderation/HidePosts.feature b/cypress/integration/moderation/HidePosts.feature index 6a11eaf3b..4006f4068 100644 --- a/cypress/integration/moderation/HidePosts.feature +++ b/cypress/integration/moderation/HidePosts.feature @@ -20,8 +20,7 @@ Feature: Hide Posts Scenario: Visiting a disabled post's page should return 404 Given I am logged in with a "user" role - When I visit the "/post/this-post-is-disabled" page - Then I see a 404 error with the following message: + Then the page "/post/this-post-is-disabled" returns a 404 error with a message: """ We cannot find that post :( """ diff --git a/pages/post/_slug/index.vue b/pages/post/_slug/index.vue index 68655a31f..601f5c8da 100644 --- a/pages/post/_slug/index.vue +++ b/pages/post/_slug/index.vue @@ -162,6 +162,22 @@ export default { this.title = this.post.title } }, + async asyncData(context) { + const { + params, + error, + app: { apolloProvider } + } = context + const client = apolloProvider.defaultClient + const query = gql('query Post($slug: String!) { Post(slug: $slug) { id } }') + const variables = { slug: params.slug } + const { + data: { Post } + } = await client.query({ query, variables }) + if (Post.length <= 0) { + error({ statusCode: 404, message: 'We cannot find that post :(' }) + } + }, methods: { isAuthor(id) { return this.$store.getters['auth/user'].id === id From cfbd19b428c8e4667c3c9581e1c7e05f4838ee03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Thu, 28 Feb 2019 14:35:33 +0100 Subject: [PATCH 04/65] Quickfix of different virtual DOM on client/server --- pages/post/_slug/index.vue | 299 ++++++++++++++++++------------------- 1 file changed, 148 insertions(+), 151 deletions(-) diff --git a/pages/post/_slug/index.vue b/pages/post/_slug/index.vue index 601f5c8da..9f8cb0dca 100644 --- a/pages/post/_slug/index.vue +++ b/pages/post/_slug/index.vue @@ -1,46 +1,50 @@ diff --git a/locales/de.json b/locales/de.json index b3e6289ac..c0275a928 100644 --- a/locales/de.json +++ b/locales/de.json @@ -1,4 +1,15 @@ { + "error": { + "header": { + "404": "Seite nicht gefunden" + }, + "subHeader": { + "404": "Ups, ich wars nicht" + }, + "message": { + "404": "Tut uns leid, wir haben diese Seite nicht gefunden." + } + }, "actions": { "loading": "lade", "loadMore": "mehr laden", diff --git a/locales/en.json b/locales/en.json index cfe634675..cfe889d1e 100644 --- a/locales/en.json +++ b/locales/en.json @@ -1,4 +1,15 @@ { + "error": { + "header": { + "404": "Page not found" + }, + "subHeader": { + "404": "Ups, not my fault" + }, + "message": { + "404": "Sorry, the page you're looking for cannot be found." + } + }, "actions": { "loading": "loading", "loadMore": "load more", diff --git a/pages/post/_slug/index.vue b/pages/post/_slug/index.vue index 9f8cb0dca..5422bb562 100644 --- a/pages/post/_slug/index.vue +++ b/pages/post/_slug/index.vue @@ -236,7 +236,7 @@ export default { data: { Post } } = await client.query({ query, variables }) if (Post.length <= 0) { - return error({ statusCode: 404, message: 'We cannot find that post :(' }) + return error({ statusCode: 404 }) } const [post] = Post return { From 6f116b6963f66c3e6c08937489956a9e29081f2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Mon, 4 Mar 2019 15:51:07 +0100 Subject: [PATCH 06/65] Remove custom error page I find the custom error page out of scope of this PR so I will create another tracking PR to get this feature merged as soon as possible. See: https://github.com/Human-Connection/Nitro-Web/pull/216 --- .../integration/moderation/HidePosts.feature | 2 +- layouts/error.vue | 57 ------------------- pages/post/_slug/index.vue | 4 +- 3 files changed, 4 insertions(+), 59 deletions(-) delete mode 100644 layouts/error.vue diff --git a/cypress/integration/moderation/HidePosts.feature b/cypress/integration/moderation/HidePosts.feature index f42f3c790..c2cf49912 100644 --- a/cypress/integration/moderation/HidePosts.feature +++ b/cypress/integration/moderation/HidePosts.feature @@ -22,5 +22,5 @@ Feature: Hide Posts Given I am logged in with a "user" role Then the page "/post/this-post-is-disabled" returns a 404 error with a message: """ - Sorry, the page you're looking for cannot be found. + This post could not be found """ diff --git a/layouts/error.vue b/layouts/error.vue deleted file mode 100644 index f78ed7ade..000000000 --- a/layouts/error.vue +++ /dev/null @@ -1,57 +0,0 @@ - - - diff --git a/pages/post/_slug/index.vue b/pages/post/_slug/index.vue index 5422bb562..f3726d6db 100644 --- a/pages/post/_slug/index.vue +++ b/pages/post/_slug/index.vue @@ -236,7 +236,9 @@ export default { data: { Post } } = await client.query({ query, variables }) if (Post.length <= 0) { - return error({ statusCode: 404 }) + // TODO: custom 404 error page with translations + const message = 'This post could not be found' + return error({ statusCode: 404, message }) } const [post] = Post return { From 2f9ab97b14f4bd7abd8495a0c551ac08aaea7e44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Mon, 4 Mar 2019 19:31:01 +0100 Subject: [PATCH 07/65] Fix cypress test with more specific matcher --- cypress/integration/03.TagsAndCategories.feature | 4 ++-- cypress/integration/common/steps.js | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/cypress/integration/03.TagsAndCategories.feature b/cypress/integration/03.TagsAndCategories.feature index 8f27a36cf..f8bce831b 100644 --- a/cypress/integration/03.TagsAndCategories.feature +++ b/cypress/integration/03.TagsAndCategories.feature @@ -20,7 +20,7 @@ Feature: Tags and Categories Scenario: See an overview of categories When I navigate to the administration dashboard - And I click on "Categories" + And I click on the menu item "Categories" Then I can see a list of categories ordered by post count: | Icon | Name | Posts | | | Just For Fun | 2 | @@ -29,7 +29,7 @@ Feature: Tags and Categories Scenario: See an overview of tags When I navigate to the administration dashboard - And I click on "Tags" + And I click on the menu item "Tags" Then I can see a list of tags ordered by user count: | # | Name | Users | Posts | | 1 | Democracy | 2 | 3 | diff --git a/cypress/integration/common/steps.js b/cypress/integration/common/steps.js index e2ab27ee6..a27ee56f5 100644 --- a/cypress/integration/common/steps.js +++ b/cypress/integration/common/steps.js @@ -146,6 +146,10 @@ When(`I click on {string}`, linkOrButton => { cy.contains(linkOrButton).click() }) +When(`I click on the menu item {string}`, linkOrButton => { + cy.contains('.ds-menu-item', linkOrButton).click() +}) + When('I press {string}', label => { cy.contains(label).click() }) From 44b216f1387f211ce7586d3eeaebff63ac0157e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Fri, 8 Mar 2019 02:30:03 +0100 Subject: [PATCH 08/65] Scaffold DisableModal and .spec --- components/DisableModal.spec.js | 51 +++++++++++ components/DisableModal.vue | 144 ++++++++++++++++++++++++++++++++ components/ReportModal.vue | 2 +- 3 files changed, 196 insertions(+), 1 deletion(-) create mode 100644 components/DisableModal.spec.js create mode 100644 components/DisableModal.vue diff --git a/components/DisableModal.spec.js b/components/DisableModal.spec.js new file mode 100644 index 000000000..0ca8630f8 --- /dev/null +++ b/components/DisableModal.spec.js @@ -0,0 +1,51 @@ +import { shallowMount, mount, createLocalVue } from '@vue/test-utils' +import DisableModal from './DisableModal.vue' +import Vue from 'vue' +import Vuex from 'vuex' +import Styleguide from '@human-connection/styleguide' +import portal from 'portal-vue' + +const localVue = createLocalVue() + +localVue.use(Vuex) +localVue.use(Styleguide) +localVue.use(portal) + +describe('DisableModal.vue', () => { + let wrapper + let getters + let store + let mocks + + beforeEach(() => { + getters = { + 'modal/data': () => false + } + + store = new Vuex.Store({ + getters + }) + mocks = { $t: () => {} } + }) + + describe('mount', () => { + beforeEach(() => { + wrapper = mount(DisableModal, { store, mocks, localVue }) + }) + + it('renders', () => { + expect(wrapper.is('div')).toBe(true) + }) + }) + + describe('shallowMount', () => { + beforeEach(() => { + wrapper = shallowMount(DisableModal, { store, mocks, localVue }) + }) + describe('isOpen', () => { + it('defaults to false', () => { + expect(wrapper.vm.isOpen).toBe(false) + }) + }) + }) +}) diff --git a/components/DisableModal.vue b/components/DisableModal.vue new file mode 100644 index 000000000..5865d3e95 --- /dev/null +++ b/components/DisableModal.vue @@ -0,0 +1,144 @@ + + + + + diff --git a/components/ReportModal.vue b/components/ReportModal.vue index 1ae23fd94..f12072c0e 100644 --- a/components/ReportModal.vue +++ b/components/ReportModal.vue @@ -4,7 +4,7 @@ :is-open="isOpen" :confirm-label="$t('report.submit')" :cancel-label="$t('report.cancel')" - confrim-icon="warning" + confirm-icon="warning" @confirm="report" @cancel="close" > From 3cebb0eea08ffc18b059a737adea488e68d50ea0 Mon Sep 17 00:00:00 2001 From: Matt Rider Date: Thu, 7 Mar 2019 20:59:13 -0300 Subject: [PATCH 09/65] Update ReportModal to work with back end --- components/ReportModal.vue | 9 +- cypress/integration/05.ReportContent.feature | 2 +- cypress/integration/common/report.js | 31 +- locales/en.json | 2 +- package.json | 7 +- yarn.lock | 636 ++++++++++++++++++- 6 files changed, 635 insertions(+), 52 deletions(-) diff --git a/components/ReportModal.vue b/components/ReportModal.vue index f12072c0e..13093eeec 100644 --- a/components/ReportModal.vue +++ b/components/ReportModal.vue @@ -90,24 +90,19 @@ export default { this.$store.commit('modal/SET_OPEN', {}) }, report() { - console.log('') this.loading = true this.disabled = true this.$apollo .mutate({ mutation: gql` - mutation($id: ID!, $type: ResourceEnum!, $description: String) { - report( - resource: { id: $id, type: $type } - description: $description - ) { + mutation($id: ID!, $description: String) { + report(id: $id, description: $description) { id } } `, variables: { id: this.data.id, - type: this.data.context, description: '-' } }) diff --git a/cypress/integration/05.ReportContent.feature b/cypress/integration/05.ReportContent.feature index 76ebb4fcd..92271cbcb 100644 --- a/cypress/integration/05.ReportContent.feature +++ b/cypress/integration/05.ReportContent.feature @@ -15,7 +15,7 @@ Feature: Report and Moderate Scenario Outline: Report a post from various pages Given I am logged in with a "user" role When I see David Irving's post on the - And I click on "Report Contribution" from the triple dot menu of the post + And I click on "Report Post" from the triple dot menu of the post And I confirm the reporting dialog because it is a criminal act under German law: """ Do you really want to report the contribution "The Truth about the Holocaust"? diff --git a/cypress/integration/common/report.js b/cypress/integration/common/report.js index db264ddde..985a62af1 100644 --- a/cypress/integration/common/report.js +++ b/cypress/integration/common/report.js @@ -39,18 +39,15 @@ Given('I am logged in with a {string} role', role => { }) }) -When( - 'I click on "Report Contribution" from the triple dot menu of the post', - () => { - cy.contains('.ds-card', davidIrvingPostTitle) - .find('.content-menu-trigger') - .click() +When('I click on "Report Post" from the triple dot menu of the post', () => { + cy.contains('.ds-card', davidIrvingPostTitle) + .find('.content-menu-trigger') + .click() - cy.get('.popover .ds-menu-item-link') - .contains('Report Contribution') - .click() - } -) + cy.get('.popover .ds-menu-item-link') + .contains('Report Post') + .click() +}) When( 'I click on "Report User" from the triple dot menu in the user info box', @@ -122,16 +119,16 @@ When(/^I confirm the reporting dialog .*:$/, message => { Given('somebody reported the following posts:', table => { table.hashes().forEach(({ id }) => { - const reporter = { - email: `reporter${id}@example.org`, + const submitter = { + email: `submitter${id}@example.org`, password: '1234' } cy.factory() - .create('User', reporter) - .authenticateAs(reporter) + .create('User', submitter) + .authenticateAs(submitter) .create('Report', { - description: "I don't like this post", - resource: { id, type: 'contribution' } + id, + description: "Offensive content" }) }) }) diff --git a/locales/en.json b/locales/en.json index 35d3122f2..aa9bbc0cd 100644 --- a/locales/en.json +++ b/locales/en.json @@ -162,7 +162,7 @@ "message": "Do you really want to report the user \"{name}\"?" }, "contribution": { - "title": "Report Contribution", + "title": "Report Post", "type": "Contribution", "message": "Do you really want to report the contribution \"{name}\"?" }, diff --git a/package.json b/package.json index e0cafe56f..57b2d402b 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ } }, "dependencies": { + "@human-connection/styleguide": "~0.5.2", "@nuxtjs/apollo": "4.0.0-rc4", "@nuxtjs/axios": "~5.4.1", "@nuxtjs/dotenv": "~1.3.0", @@ -43,6 +44,7 @@ "apollo-client": "~2.5.1", "cookie-universal-nuxt": "~2.0.14", "cross-env": "~5.2.0", + "cypress": "^3.1.5", "date-fns": "2.0.0-alpha.27", "express": "~4.16.4", "graphql": "~14.1.1", @@ -51,12 +53,11 @@ "nuxt": "~2.4.5", "nuxt-env": "~0.1.0", "portal-vue": "~1.5.1", - "@human-connection/styleguide": "~0.5.2", - "v-tooltip": "~2.0.0-rc.33", - "vue-count-to": "~1.0.13", "string-hash": "^1.1.3", "tiptap": "^1.14.0", "tiptap-extensions": "^1.13.0", + "v-tooltip": "~2.0.0-rc.33", + "vue-count-to": "~1.0.13", "vue-izitoast": "1.1.2", "vue-sweetalert-icons": "~3.2.0", "vuex-i18n": "~1.11.0" diff --git a/yarn.lock b/yarn.lock index 72992506f..a8aea8081 100644 --- a/yarn.lock +++ b/yarn.lock @@ -876,6 +876,24 @@ fs-extra "7.0.0" watchify "3.11.0" +"@cypress/listr-verbose-renderer@0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#a77492f4b11dcc7c446a34b3e28721afd33c642a" + integrity sha1-p3SS9LEdzHxEajSz4ochr9M8ZCo= + dependencies: + chalk "^1.1.3" + cli-cursor "^1.0.2" + date-fns "^1.27.2" + figures "^1.7.0" + +"@cypress/xvfb@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.3.tgz#6319afdcdcff7d1505daeeaa84484d0596189860" + integrity sha512-yYrK+/bgL3hwoRHMZG4r5fyLniCy1pXex5fimtewAY6vE/jsVs8Q37UsEO03tFlcmiLnQ3rBNMaZBYTi/+C1cw== + dependencies: + debug "^3.1.0" + lodash.once "^4.1.1" + "@human-connection/styleguide@~0.5.2": version "0.5.2" resolved "https://registry.yarnpkg.com/@human-connection/styleguide/-/styleguide-0.5.2.tgz#a7d05b612562cfbe4377032bdf32df4a8f0e3f45" @@ -1218,6 +1236,16 @@ dependencies: "@types/node" "*" +"@types/blob-util@1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@types/blob-util/-/blob-util-1.3.3.tgz#adba644ae34f88e1dd9a5864c66ad651caaf628a" + integrity sha512-4ahcL/QDnpjWA2Qs16ZMQif7HjGP2cw3AGjHabybjw7Vm1EKu+cfQN1D78BaZbS1WJNa1opSMF5HNMztx7lR0w== + +"@types/bluebird@3.5.18": + version "3.5.18" + resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.18.tgz#6a60435d4663e290f3709898a4f75014f279c4d6" + integrity sha512-OTPWHmsyW18BhrnG5x8F7PzeZ2nFxmHGb42bZn79P9hl+GI5cMzyPgQTwNjbem0lJhoru/8vtjAFCUOu3+gE2w== + "@types/body-parser@*", "@types/body-parser@1.17.0": version "1.17.0" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.17.0.tgz#9f5c9d9bd04bb54be32d5eb9fc0d8c974e6cf58c" @@ -1226,6 +1254,24 @@ "@types/connect" "*" "@types/node" "*" +"@types/chai-jquery@1.1.35": + version "1.1.35" + resolved "https://registry.yarnpkg.com/@types/chai-jquery/-/chai-jquery-1.1.35.tgz#9a8f0a39ec0851b2768a8f8c764158c2a2568d04" + integrity sha512-7aIt9QMRdxuagLLI48dPz96YJdhu64p6FCa6n4qkGN5DQLHnrIjZpD9bXCvV2G0NwgZ1FAmfP214dxc5zNCfgQ== + dependencies: + "@types/chai" "*" + "@types/jquery" "*" + +"@types/chai@*": + version "4.1.7" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.1.7.tgz#1b8e33b61a8c09cbe1f85133071baa0dbf9fa71a" + integrity sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA== + +"@types/chai@4.0.8": + version "4.0.8" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.0.8.tgz#d27600e9ba2f371e08695d90a0fe0408d89c7be7" + integrity sha512-m812CONwdZn/dMzkIJEY0yAs4apyTkTORgfB2UsMOxgkUbC205AHnm4T8I0I5gPg9MHrFc1dJ35iS75c0CJkjg== + "@types/connect@*": version "3.4.32" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.32.tgz#aa0e9616b9435ccad02bc52b5b454ffc2c70ba28" @@ -1267,6 +1313,23 @@ "@types/express-serve-static-core" "*" "@types/serve-static" "*" +"@types/jquery@*": + version "3.3.29" + resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.3.29.tgz#680a2219ce3c9250483722fccf5570d1e2d08abd" + integrity sha512-FhJvBninYD36v3k6c+bVk1DSZwh7B5Dpb/Pyk3HKVsiohn0nhbefZZ+3JXbWQhFyt0MxSl2jRDdGQPHeOHFXrQ== + dependencies: + "@types/sizzle" "*" + +"@types/jquery@3.3.6": + version "3.3.6" + resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.3.6.tgz#5932ead926307ca21e5b36808257f7c926b06565" + integrity sha512-403D4wN95Mtzt2EoQHARf5oe/jEPhzBOBNrunk+ydQGW8WmkQ/E8rViRAEB1qEt/vssfGfNVD6ujP4FVeegrLg== + +"@types/lodash@4.14.87": + version "4.14.87" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.87.tgz#55f92183b048c2c64402afe472f8333f4e319a6b" + integrity sha512-AqRC+aEF4N0LuNHtcjKtvF9OTfqZI0iaBoe3dA6m/W+/YZJBZjBmW/QIZ8fBeXC6cnytSY9tBoFBqZ9uSCeVsw== + "@types/long@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.0.tgz#719551d2352d301ac8b81db732acb6bdc28dbdef" @@ -1277,6 +1340,16 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d" integrity sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw== +"@types/minimatch@3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/mocha@2.2.44": + version "2.2.44" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.44.tgz#1d4a798e53f35212fd5ad4d04050620171cd5b5e" + integrity sha512-k2tWTQU8G4+iSMvqKi0Q9IIsWAp/n8xzdZS4Q4YVIltApoMA00wFBFdlJnmoaK1/z7B0Cy0yPe6GgXteSmdUNw== + "@types/node@*": version "11.9.4" resolved "https://registry.yarnpkg.com/@types/node/-/node-11.9.4.tgz#ceb0048a546db453f6248f2d1d95e937a6f00a14" @@ -1310,6 +1383,29 @@ "@types/express-serve-static-core" "*" "@types/mime" "*" +"@types/sinon-chai@3.2.2": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.2.tgz#5cfdbda70bae30f79a9423334af9e490e4cce793" + integrity sha512-5zSs2AslzyPZdOsbm2NRtuSNAI2aTWzNKOHa/GRecKo7a5efYD7qGcPxMZXQDayVXT2Vnd5waXxBvV31eCZqiA== + dependencies: + "@types/chai" "*" + "@types/sinon" "*" + +"@types/sinon@*": + version "7.0.9" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-7.0.9.tgz#981593ea396a4fb1b69e3d8ba04de0a420fd4b16" + integrity sha512-PS102Fj4BAa9B8C0qLp677UiW9sdI+9ZhsD6GdPbcNKNdymyKKRJ1Bsc5Uk5pQV7jTtLozTQdxzgnQx+aH8Pvg== + +"@types/sinon@7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-7.0.0.tgz#84e707e157ec17d3e4c2a137f41fc3f416c0551e" + integrity sha512-kcYoPw0uKioFVC/oOqafk2yizSceIQXCYnkYts9vJIwQklFRsMubTObTDrjQamUyBRd47332s85074cd/hCwxg== + +"@types/sizzle@*": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47" + integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg== + "@types/strip-bom@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" @@ -1686,6 +1782,16 @@ ajv-keywords@^3.1.0: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.0.tgz#4b831e7b531415a7cc518cd404e73f6193c6349d" integrity sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw== +ajv@^5.1.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + ajv@^6.1.0, ajv@^6.5.5, ajv@^6.9.1: version "6.9.1" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.9.1.tgz#a4d3683d74abc5670e75f0b16520f70a20ea8dc1" @@ -1725,6 +1831,11 @@ ansi-colors@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== +ansi-escapes@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + integrity sha1-06ioOzGapneTZisT52HHkRQiMG4= + ansi-escapes@^3.0.0, ansi-escapes@^3.1.0, ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" @@ -2181,6 +2292,13 @@ async-retry@^1.2.1: dependencies: retry "0.12.0" +async@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.4.0.tgz#4990200f18ea5b837c2cc4f8c031a6985c385611" + integrity sha1-SZAgDxjqW4N8LMT4wDGmmFw4VhE= + dependencies: + lodash "^4.14.0" + async@^2.1.4, async@^2.3.0, async@^2.5.0, async@^2.6.1: version "2.6.2" resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" @@ -2215,7 +2333,7 @@ aws-sign2@~0.7.0: resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= -aws4@^1.8.0: +aws4@^1.6.0, aws4@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== @@ -2335,7 +2453,7 @@ babel-preset-jest@^24.1.0: "@babel/plugin-syntax-object-rest-spread" "^7.0.0" babel-plugin-jest-hoist "^24.1.0" -babel-runtime@^6.11.6, babel-runtime@^6.22.0, babel-runtime@^6.26.0: +babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= @@ -2461,6 +2579,11 @@ block-stream@*: dependencies: inherits "~2.0.0" +bluebird@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" + integrity sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw= + bluebird@3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.2.tgz#1be0908e054a751754549c270489c1505d4ab15a" @@ -2768,6 +2891,11 @@ bser@^2.0.0: dependencies: node-int64 "^0.4.0" +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" @@ -2868,6 +2996,13 @@ cached-path-relative@^1.0.0: resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.2.tgz#a13df4196d26776220cc3356eb147a52dba2c6db" integrity sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg== +cachedir@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-1.3.0.tgz#5e01928bf2d95b5edd94b0942188246740e0dbc4" + integrity sha512-O1ji32oyON9laVPJL1IZ5bmwd2cB46VfpxkDequezH+15FDzzVddEyrGEeX4WusDSqKxdyFdDQDEG1yo1GoWkg== + dependencies: + os-homedir "^1.0.1" + caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -2972,7 +3107,16 @@ chai@^4.1.2: pathval "^1.1.0" type-detect "^4.0.5" -chalk@^1.1.1, chalk@^1.1.3: +chalk@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -3002,6 +3146,11 @@ check-error@^1.0.2: resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= +check-more-types@2.24.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" + integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= + check-types@^7.3.0: version "7.4.0" resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.4.0.tgz#0378ec1b9616ec71f774931a3c6516fad8c152f4" @@ -3066,7 +3215,7 @@ chrome-trace-event@^1.0.0: dependencies: tslib "^1.9.0" -ci-info@^1.5.0, ci-info@^1.6.0: +ci-info@^1.0.0, ci-info@^1.5.0, ci-info@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== @@ -3121,6 +3270,13 @@ cli-boxes@^2.0.0: resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.0.0.tgz#de5eb5ce7462833133e85f5710fabb38377e9333" integrity sha512-P46J1Wf3BVD0E5plybtf6g/NtHYAUlOIt7w3ou/Ova/p7dJPdukPV4yp+BF8dpmnnk45XlMzn+x9kfzyucKzrg== +cli-cursor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc= + dependencies: + restore-cursor "^1.0.1" + cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -3128,6 +3284,11 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" +cli-spinners@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" + integrity sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw= + cli-spinners@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" @@ -3150,6 +3311,14 @@ cli-table@^0.3.1: dependencies: colors "1.0.3" +cli-truncate@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" + integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= + dependencies: + slice-ansi "0.0.4" + string-width "^1.0.1" + cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" @@ -3288,13 +3457,18 @@ combine-source-map@^0.8.0, combine-source-map@~0.8.0: lodash.memoize "~3.0.3" source-map "~0.5.3" -combined-stream@^1.0.6, combined-stream@~1.0.6: +combined-stream@^1.0.6, combined-stream@~1.0.5, combined-stream@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== dependencies: delayed-stream "~1.0.0" +commander@2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + integrity sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ== + commander@2.17.x, commander@~2.17.1: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" @@ -3305,6 +3479,13 @@ commander@^2.18.0, commander@^2.19.0, commander@^2.9.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== +common-tags@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.4.0.tgz#1187be4f3d4cf0c0427d43f74eef1f73501614c0" + integrity sha1-EYe+Tz1M8MBCfUP3Tu8fc1AWFMA= + dependencies: + babel-runtime "^6.18.0" + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -3345,6 +3526,15 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +concat-stream@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + integrity sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc= + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + concat-stream@^1.5.0, concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@~1.6.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" @@ -3938,6 +4128,52 @@ cypress-cucumber-preprocessor@~1.11.0: glob "^7.1.2" through "^2.3.8" +cypress@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-3.1.5.tgz#5227b2ce9306c47236d29e703bad9055d7218042" + integrity sha512-jzYGKJqU1CHoNocPndinf/vbG28SeU+hg+4qhousT/HDBMJxYgjecXOmSgBX/ga9/TakhqSrIrSP2r6gW/OLtg== + dependencies: + "@cypress/listr-verbose-renderer" "0.4.1" + "@cypress/xvfb" "1.2.3" + "@types/blob-util" "1.3.3" + "@types/bluebird" "3.5.18" + "@types/chai" "4.0.8" + "@types/chai-jquery" "1.1.35" + "@types/jquery" "3.3.6" + "@types/lodash" "4.14.87" + "@types/minimatch" "3.0.3" + "@types/mocha" "2.2.44" + "@types/sinon" "7.0.0" + "@types/sinon-chai" "3.2.2" + bluebird "3.5.0" + cachedir "1.3.0" + chalk "2.4.1" + check-more-types "2.24.0" + commander "2.11.0" + common-tags "1.4.0" + debug "3.1.0" + execa "0.10.0" + executable "4.1.1" + extract-zip "1.6.6" + fs-extra "4.0.1" + getos "3.1.0" + glob "7.1.2" + is-ci "1.0.10" + is-installed-globally "0.1.0" + lazy-ass "1.6.0" + listr "0.12.0" + lodash "4.17.11" + log-symbols "2.2.0" + minimist "1.2.0" + moment "2.22.2" + ramda "0.24.1" + request "2.87.0" + request-progress "0.3.1" + supports-color "5.1.0" + tmp "0.0.31" + url "0.11.0" + yauzl "2.8.0" + d@1: version "1.0.0" resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" @@ -3966,6 +4202,11 @@ date-fns@2.0.0-alpha.27: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.0.0-alpha.27.tgz#5ecd4204ef0e7064264039570f6e8afbc014481c" integrity sha512-cqfVLS+346P/Mpj2RpDrBv0P4p2zZhWWvfY5fuWrXNR/K38HaAGEkeOwb47hIpQP9Jr/TIxjZ2/sNMQwdXuGMg== +date-fns@^1.27.2: + version "1.30.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" + integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== + date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" @@ -3983,6 +4224,13 @@ debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: dependencies: ms "2.0.0" +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + debug@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.0.1.tgz#f9bb36d439b8d1f0dd52d8fb6b46e4ebb8c1cd5b" @@ -4357,6 +4605,11 @@ electron-to-chromium@^1.3.103: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz#b1ccf619df7295aea17bc6951dc689632629e4a9" integrity sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g== +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= + elliptic@^6.0.0: version "6.4.1" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" @@ -4720,6 +4973,19 @@ exec-sh@^0.2.0: dependencies: merge "^1.2.0" +execa@0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" + integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw== + dependencies: + cross-spawn "^6.0.0" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" @@ -4746,6 +5012,18 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +executable@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" + integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== + dependencies: + pify "^2.2.0" + +exit-hook@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -4840,7 +5118,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@~3.0.2: +extend@~3.0.1, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -4898,6 +5176,16 @@ extract-from-css@^0.4.4: dependencies: css "^2.1.0" +extract-zip@1.6.6: + version "1.6.6" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.6.tgz#1290ede8d20d0872b429fd3f351ca128ec5ef85c" + integrity sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw= + dependencies: + concat-stream "1.6.0" + debug "2.6.9" + mkdirp "0.5.0" + yauzl "2.4.1" + extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -4908,6 +5196,11 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= +fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= + fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" @@ -4947,6 +5240,13 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" +fd-slicer@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" + integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU= + dependencies: + pend "~1.2.0" + figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" @@ -4959,6 +5259,14 @@ figures@2.0.0, figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" +figures@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + file-entry-cache@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" @@ -5143,7 +5451,7 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -form-data@~2.3.2: +form-data@~2.3.1, form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== @@ -5187,6 +5495,15 @@ fs-capacitor@^2.0.0: resolved "https://registry.yarnpkg.com/fs-capacitor/-/fs-capacitor-2.0.0.tgz#6cbafaa39313eebf9c49ecff8795aadc08337fc5" integrity sha512-CIJZpxbVWhO+qyODeCR55Q+6vj0p2oL8DAWd/DZi3Ev+25PimUoScw07K0fPgluaH3lFoqNvwW13BDYfHWFQJw== +fs-extra@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.1.tgz#7fc0c6c8957f983f57f306a24e5b9ddd8d0dd880" + integrity sha1-f8DGyJV/mD9X8waiTlud3Y0N2IA= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^3.0.0" + universalify "^0.1.0" + fs-extra@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.0.tgz#8cc3f47ce07ef7b3593a11b9fb245f7e34c041d6" @@ -5318,6 +5635,13 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= +getos@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/getos/-/getos-3.1.0.tgz#db3aa4df15a3295557ce5e81aa9e3e5cdfaa6567" + integrity sha512-i9vrxtDu5DlLVFcrbqUqGWYlZN/zZ4pGMICCAcZoYsX3JA54nYp8r5EThw5K+m2q3wszkx4Th746JstspB0H4Q== + dependencies: + async "2.4.0" + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -5361,6 +5685,18 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" +glob@7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" @@ -5505,6 +5841,14 @@ har-schema@^2.0.0: resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= +har-validator@~5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + integrity sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0= + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + har-validator@~5.1.0: version "5.1.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" @@ -5539,6 +5883,11 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -5909,7 +6258,7 @@ indent-string@^2.1.0: dependencies: repeating "^2.0.0" -indent-string@^3.1.0: +indent-string@^3.0.0, indent-string@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= @@ -6062,6 +6411,13 @@ is-callable@^1.1.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== +is-ci@1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" + integrity sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4= + dependencies: + ci-info "^1.0.0" + is-ci@^1.0.10: version "1.2.1" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" @@ -6214,7 +6570,7 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" -is-installed-globally@^0.1.0: +is-installed-globally@0.1.0, is-installed-globally@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= @@ -6925,6 +7281,11 @@ json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -6971,6 +7332,13 @@ json5@^2.1.0: dependencies: minimist "^1.2.0" +jsonfile@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" + integrity sha1-pezG9l9T9mLEQVx2daAzHQmS7GY= + optionalDependencies: + graceful-fs "^4.1.6" + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -7106,6 +7474,11 @@ launch-editor@^2.2.1: chalk "^2.3.0" shell-quote "^1.6.1" +lazy-ass@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" + integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= + lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -7145,6 +7518,57 @@ linkify-it@~2.1.0: dependencies: uc.micro "^1.0.1" +listr-silent-renderer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" + integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= + +listr-update-renderer@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz#ca80e1779b4e70266807e8eed1ad6abe398550f9" + integrity sha1-yoDhd5tOcCZoB+ju0a1qvjmFUPk= + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + elegant-spinner "^1.0.1" + figures "^1.7.0" + indent-string "^3.0.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + strip-ansi "^3.0.1" + +listr-verbose-renderer@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" + integrity sha1-ggb0z21S3cWCfl/RSYng6WWTOjU= + dependencies: + chalk "^1.1.3" + cli-cursor "^1.0.2" + date-fns "^1.27.2" + figures "^1.7.0" + +listr@0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.12.0.tgz#6bce2c0f5603fa49580ea17cd6a00cc0e5fa451a" + integrity sha1-a84sD1YD+klYDqF81qAMwOX6RRo= + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + figures "^1.7.0" + indent-string "^2.1.0" + is-promise "^2.1.0" + is-stream "^1.1.0" + listr-silent-renderer "^1.1.1" + listr-update-renderer "^0.2.0" + listr-verbose-renderer "^0.4.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + ora "^0.2.3" + p-map "^1.1.1" + rxjs "^5.0.0-beta.11" + stream-to-observable "^0.1.0" + strip-ansi "^3.0.1" + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -7276,7 +7700,7 @@ lodash.mergewith@^4.6.0: resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" integrity sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ== -lodash.once@^4.0.0: +lodash.once@^4.0.0, lodash.once@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= @@ -7316,18 +7740,33 @@ lodash.uniqueid@^4.0.1: resolved "https://registry.yarnpkg.com/lodash.uniqueid/-/lodash.uniqueid-4.0.1.tgz#3268f26a7c88e4f4b1758d679271814e31fa5b26" integrity sha1-MmjyanyI5PSxdY1nknGBTjH6WyY= -lodash@4.x, lodash@^4.0.0, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@~4.17.10: +lodash@4.17.11, lodash@4.x, lodash@^4.0.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@~4.17.10: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== -log-symbols@^2.2.0: +log-symbols@2.2.0, log-symbols@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== dependencies: chalk "^2.0.1" +log-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= + dependencies: + chalk "^1.0.0" + +log-update@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" + integrity sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE= + dependencies: + ansi-escapes "^1.0.0" + cli-cursor "^1.0.2" + long@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" @@ -7565,7 +8004,7 @@ miller-rabin@^4.0.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad" integrity sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg== -mime-types@^2.1.12, mime-types@~2.1.18, mime-types@~2.1.19: +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.19: version "2.1.22" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd" integrity sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog== @@ -7609,16 +8048,16 @@ minimist@0.0.8: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= +minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + minimist@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de" integrity sha1-md9lelJXTCHJBXSX33QnkLK0wN4= -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" @@ -7671,6 +8110,13 @@ mixin-object@^2.0.1: for-in "^0.1.3" is-extendable "^0.1.1" +mkdirp@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12" + integrity sha1-HXMHam35hs2TROFecfzAWkyavxI= + dependencies: + minimist "0.0.8" + mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -7699,6 +8145,11 @@ module-deps@^6.0.0: through2 "^2.0.0" xtend "^4.0.0" +moment@2.22.2: + version "2.22.2" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66" + integrity sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y= + move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -8098,6 +8549,11 @@ nwsapi@^2.0.7: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.0.tgz#781065940aed90d9bb01ca5d0ce0fcf81c32712f" integrity sha512-ZG3bLAvdHmhIjaQ/Db1qvBxsGvFMLIRpQszyqbg31VJ53UP++uZX1/gf3Ut96pdwN9AuDwlMqIYLm0UPCdUeHg== +oauth-sign@~0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM= + oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" @@ -8191,6 +8647,11 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +onetime@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= + onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" @@ -8245,6 +8706,16 @@ optionator@^0.8.1, optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" +ora@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" + integrity sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q= + dependencies: + chalk "^1.1.1" + cli-cursor "^1.0.2" + cli-spinners "^0.1.2" + object-assign "^4.0.1" + ora@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/ora/-/ora-3.1.0.tgz#dbedd8c03b5d017fb67083e87ee52f5ec89823ed" @@ -8267,7 +8738,7 @@ os-browserify@^0.3.0, os-browserify@~0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= -os-homedir@^1.0.0: +os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= @@ -8288,7 +8759,7 @@ os-locale@^3.0.0: lcid "^2.0.0" mem "^4.0.0" -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: +os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= @@ -8344,6 +8815,11 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-map@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== + p-reduce@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" @@ -8554,12 +9030,17 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -pify@^2.0.0, pify@^2.3.0: +pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= @@ -9574,7 +10055,7 @@ q@^1.1.2: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= -qs@6.5.2, qs@~6.5.2: +qs@6.5.2, qs@~6.5.1, qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== @@ -9589,6 +10070,11 @@ querystring@0.2.0, querystring@^0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +ramda@0.24.1: + version "0.24.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.24.1.tgz#c3b7755197f35b8dc3502228262c4c91ddb6b857" + integrity sha1-w7d1UZfzW43DUCIoJixMkd22uFc= + randomatic@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" @@ -9898,6 +10384,13 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" +request-progress@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-0.3.1.tgz#0721c105d8a96ac6b2ce8b2c89ae2d5ecfcf6b3a" + integrity sha1-ByHBBdipasayzossia4tXs/Pazo= + dependencies: + throttleit "~0.0.2" + request-promise-core@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" @@ -9914,6 +10407,32 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.1" tough-cookie "^2.3.3" +request@2.87.0: + version "2.87.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" + integrity sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + request@^2.87.0, request@^2.88.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" @@ -9994,6 +10513,14 @@ resolve@^1.1.4, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.2.0, resolve@^1.3.2, dependencies: path-parse "^1.0.6" +restore-cursor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" + integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE= + dependencies: + exit-hook "^1.0.0" + onetime "^1.0.0" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -10061,6 +10588,13 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" +rxjs@^5.0.0-beta.11: + version "5.5.12" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" + integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw== + dependencies: + symbol-observable "1.0.1" + rxjs@^6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" @@ -10348,6 +10882,11 @@ slash@^2.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= + slice-ansi@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" @@ -10644,6 +11183,11 @@ stream-splicer@^2.0.0: inherits "^2.0.1" readable-stream "^2.0.2" +stream-to-observable@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe" + integrity sha1-Rb8dny19wJvtgfHDB8Qw5ouEz/4= + streamsearch@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" @@ -10809,6 +11353,13 @@ subscriptions-transport-ws@^0.9.11, subscriptions-transport-ws@^0.9.15: symbol-observable "^1.0.4" ws "^5.2.0" +supports-color@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.1.0.tgz#058a021d1b619f7ddf3980d712ea3590ce7de3d5" + integrity sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ== + dependencies: + has-flag "^2.0.0" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -10862,6 +11413,11 @@ svgo@^1.0.0, svgo@^1.1.1: unquote "~1.1.1" util.promisify "~1.0.0" +symbol-observable@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" + integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ= + symbol-observable@^1.0.2, symbol-observable@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" @@ -10999,6 +11555,11 @@ throttle-debounce@^2.0.0: resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-2.1.0.tgz#257e648f0a56bd9e54fe0f132c4ab8611df4e1d5" integrity sha512-AOvyNahXQuU7NN+VVvOOX+uW6FPaWdAOdRP5HfwYxAfCzXTFKRMoIMk+n+po318+ktcChx+F1Dd91G3YHeMKyg== +throttleit@~0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz#cfedf88e60c00dd9697b61fdd2a8343a9b680eaf" + integrity sha1-z+34jmDADdlpe2H90qg0OptoDq8= + through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -11100,6 +11661,13 @@ title-case@^2.1.1: no-case "^2.2.0" upper-case "^1.0.3" +tmp@0.0.31: + version "0.0.31" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" + integrity sha1-jzirlDjhcxXl29izZX6L+yd65Kc= + dependencies: + os-tmpdir "~1.0.1" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -11184,6 +11752,13 @@ tough-cookie@^2.3.3, tough-cookie@^2.3.4: psl "^1.1.28" punycode "^2.1.1" +tough-cookie@~2.3.3: + version "2.3.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" + integrity sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA== + dependencies: + punycode "^1.4.1" + tough-cookie@~2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" @@ -11490,7 +12065,7 @@ url-parse-lax@^1.0.0: dependencies: prepend-http "^1.0.1" -url@^0.11.0, url@~0.11.0: +url@0.11.0, url@^0.11.0, url@~0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= @@ -12209,6 +12784,21 @@ yargs@~1.2.6: dependencies: minimist "^0.1.0" +yauzl@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" + integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU= + dependencies: + fd-slicer "~1.0.1" + +yauzl@2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.8.0.tgz#79450aff22b2a9c5a41ef54e02db907ccfbf9ee2" + integrity sha1-eUUK/yKyqcWkHvVOAtuQfM+/nuI= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.0.1" + yn@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" From e10b9fde74f70ed3c7e9d764ccad1a1a7e576213 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Fri, 8 Mar 2019 01:26:57 +0100 Subject: [PATCH 10/65] Fix translations, lint and some tests --- components/ReportModal.vue | 7 ++++++- cypress/integration/common/report.js | 2 +- graphql/ModerationListQuery.js | 4 ++-- locales/de.json | 2 +- locales/en.json | 2 +- pages/moderation/index.vue | 30 ++++++++++++++-------------- 6 files changed, 26 insertions(+), 21 deletions(-) diff --git a/components/ReportModal.vue b/components/ReportModal.vue index 13093eeec..6e5af56f5 100644 --- a/components/ReportModal.vue +++ b/components/ReportModal.vue @@ -19,7 +19,7 @@ -

+

@@ -101,7 +101,7 @@ export default { return { type: ' ', name: ' ', - reporter: this.$t('moderation.reports.reporter') + submitter: this.$t('moderation.reports.submitter') // actions: ' ' } } From 2a1276cdc325c77bbe6745a0ed2508e304dac897 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Fri, 8 Mar 2019 14:09:13 +0100 Subject: [PATCH 11/65] Better test ReportModal first --- components/DisableModal.spec.js | 51 ----------- components/DisableModal.vue | 144 -------------------------------- components/ReportModal.spec.js | 86 +++++++++++++++++++ 3 files changed, 86 insertions(+), 195 deletions(-) delete mode 100644 components/DisableModal.spec.js delete mode 100644 components/DisableModal.vue create mode 100644 components/ReportModal.spec.js diff --git a/components/DisableModal.spec.js b/components/DisableModal.spec.js deleted file mode 100644 index 0ca8630f8..000000000 --- a/components/DisableModal.spec.js +++ /dev/null @@ -1,51 +0,0 @@ -import { shallowMount, mount, createLocalVue } from '@vue/test-utils' -import DisableModal from './DisableModal.vue' -import Vue from 'vue' -import Vuex from 'vuex' -import Styleguide from '@human-connection/styleguide' -import portal from 'portal-vue' - -const localVue = createLocalVue() - -localVue.use(Vuex) -localVue.use(Styleguide) -localVue.use(portal) - -describe('DisableModal.vue', () => { - let wrapper - let getters - let store - let mocks - - beforeEach(() => { - getters = { - 'modal/data': () => false - } - - store = new Vuex.Store({ - getters - }) - mocks = { $t: () => {} } - }) - - describe('mount', () => { - beforeEach(() => { - wrapper = mount(DisableModal, { store, mocks, localVue }) - }) - - it('renders', () => { - expect(wrapper.is('div')).toBe(true) - }) - }) - - describe('shallowMount', () => { - beforeEach(() => { - wrapper = shallowMount(DisableModal, { store, mocks, localVue }) - }) - describe('isOpen', () => { - it('defaults to false', () => { - expect(wrapper.vm.isOpen).toBe(false) - }) - }) - }) -}) diff --git a/components/DisableModal.vue b/components/DisableModal.vue deleted file mode 100644 index 5865d3e95..000000000 --- a/components/DisableModal.vue +++ /dev/null @@ -1,144 +0,0 @@ - - - - - diff --git a/components/ReportModal.spec.js b/components/ReportModal.spec.js new file mode 100644 index 000000000..827c60dcf --- /dev/null +++ b/components/ReportModal.spec.js @@ -0,0 +1,86 @@ +import { shallowMount, render, mount, createLocalVue } from '@vue/test-utils' +import ReportModal from './ReportModal.vue' +import Vue from 'vue' +import Vuex from 'vuex' +import Styleguide from '@human-connection/styleguide' +import portal from 'portal-vue' + +const localVue = createLocalVue() + +localVue.use(Vuex) +localVue.use(Styleguide) +localVue.use(portal) + +describe('ReportModal.vue', () => { + let wrapper + let getters + let store + let mocks + let $apollo + + beforeEach(() => { + getters = { + 'modal/data': () => { + return { + success: false, + loading: false, + disabled: false + } + } + } + $apollo = { + mutate: jest.fn() + } + }) + + describe('mount', () => { + const wrapper = () => { + mocks = { + $t: () => {}, + $apollo + } + store = new Vuex.Store({ + getters + }) + return mount(ReportModal, { store, mocks, localVue }) + } + + it('renders', () => { + expect(wrapper().is('div')).toBe(true) + }) + + describe('when open', () => { + beforeEach(() => { + getters['modal/open'] = () => 'report' + }) + + describe('confirm', () => { + it('calls a mutation', () => { + console.log(wrapper().html()) + const confirmButton = wrapper().find('.ds-button-danger') + confirmButton.trigger('click') + expect($apollo.mutate).toHaveBeenCalled() + }) + }) + }) + }) + + describe('shallowMount', () => { + const wrapper = () => { + mocks = { + $t: () => {}, + $apollo + } + store = new Vuex.Store({ + getters + }) + return shallowMount(ReportModal, { store, mocks, localVue }) + } + + describe('isOpen', () => { + it('defaults to false', () => { + expect(wrapper().vm.isOpen).toBe(false) + }) + }) + }) +}) From 193cff45e29560fd2261b53aaa822cfaf5fcc6c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Fri, 8 Mar 2019 17:13:22 +0100 Subject: [PATCH 12/65] Test ReportModal with a wrapper component ... called ModalTestbed --- components/ModalTestbed.vue | 17 +++++++++++++ components/ReportModal.spec.js | 46 +++++++++++++++++++++------------- 2 files changed, 46 insertions(+), 17 deletions(-) create mode 100644 components/ModalTestbed.vue diff --git a/components/ModalTestbed.vue b/components/ModalTestbed.vue new file mode 100644 index 000000000..d6df19c56 --- /dev/null +++ b/components/ModalTestbed.vue @@ -0,0 +1,17 @@ + + + diff --git a/components/ReportModal.spec.js b/components/ReportModal.spec.js index 827c60dcf..92f03cd33 100644 --- a/components/ReportModal.spec.js +++ b/components/ReportModal.spec.js @@ -1,5 +1,6 @@ import { shallowMount, render, mount, createLocalVue } from '@vue/test-utils' import ReportModal from './ReportModal.vue' +import ModalTestbed from './ModalTestbed.vue' import Vue from 'vue' import Vuex from 'vuex' import Styleguide from '@human-connection/styleguide' @@ -12,7 +13,7 @@ localVue.use(Styleguide) localVue.use(portal) describe('ReportModal.vue', () => { - let wrapper + let Wrapper let getters let store let mocks @@ -29,44 +30,55 @@ describe('ReportModal.vue', () => { } } $apollo = { - mutate: jest.fn() + mutate: jest.fn().mockResolvedValue(null) } }) describe('mount', () => { - const wrapper = () => { + const Wrapper = () => { mocks = { $t: () => {}, + $toast: { + success: () => {}, + error: () => {} + }, $apollo } store = new Vuex.Store({ getters }) - return mount(ReportModal, { store, mocks, localVue }) + return mount(ModalTestbed, { store, mocks, localVue }) } it('renders', () => { - expect(wrapper().is('div')).toBe(true) + expect(Wrapper().is('div')).toBe(true) }) - describe('when open', () => { - beforeEach(() => { - getters['modal/open'] = () => 'report' - }) + describe('modal visible', () => { + describe('shows a report', () => { + beforeEach(() => { + getters['modal/open'] = () => 'report' + }) - describe('confirm', () => { - it('calls a mutation', () => { - console.log(wrapper().html()) - const confirmButton = wrapper().find('.ds-button-danger') - confirmButton.trigger('click') - expect($apollo.mutate).toHaveBeenCalled() + describe('click confirm button', () => { + let wrapper + + beforeEach(() => { + wrapper = Wrapper() + const confirmButton = wrapper.find('.ds-button-danger') + confirmButton.trigger('click') + }) + + it('calls report mutation', () => { + expect($apollo.mutate).toHaveBeenCalled() + }) }) }) }) }) describe('shallowMount', () => { - const wrapper = () => { + const Wrapper = () => { mocks = { $t: () => {}, $apollo @@ -79,7 +91,7 @@ describe('ReportModal.vue', () => { describe('isOpen', () => { it('defaults to false', () => { - expect(wrapper().vm.isOpen).toBe(false) + expect(Wrapper().vm.isOpen).toBe(false) }) }) }) From c0d545bae0b5693030a609d8cf2b79ba9c41b92e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Fri, 8 Mar 2019 17:16:17 +0100 Subject: [PATCH 13/65] Refactor ReportModal @Tirokk and I had a hard time to reason about the then/catch block if $toast is undefined. --- components/ReportModal.vue | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/components/ReportModal.vue b/components/ReportModal.vue index 6e5af56f5..e331e6e48 100644 --- a/components/ReportModal.vue +++ b/components/ReportModal.vue @@ -94,11 +94,11 @@ export default { close() { this.$store.commit('modal/SET_OPEN', {}) }, - report() { + async report() { this.loading = true this.disabled = true - this.$apollo - .mutate({ + try { + await this.$apollo.mutate({ mutation: gql` mutation($id: ID!, $description: String) { report(id: $id, description: $description) { @@ -111,18 +111,15 @@ export default { description: '-' } }) - .then(() => { - this.success = true - this.$toast.success('Thanks for reporting!') - setTimeout(this.close, 1500) - }) - .catch(err => { - this.$toast.error(err.message) - this.disabled = false - }) - .finally(() => { - this.loading = false - }) + this.success = true + this.$toast.success('Thanks for reporting!') + setTimeout(this.close, 1500) + } catch (err) { + this.$toast.error(err.message) + this.disabled = false + } finally { + this.loading = false + } } } } From 93a0e6654d2e1257eadf989d80008cd1aa7c8253 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Fri, 8 Mar 2019 20:38:39 +0100 Subject: [PATCH 14/65] Fledge out the test case for ReportModal @Tirokk I think I could narrow down our problem to an additional call of Wrapper(). The fact that we have to call it at least twice is a strong indicator of non-atomic tests, which is bad. --- components/ModalTestbed.vue | 6 ++- components/ReportModal.spec.js | 80 +++++++++++++++++++++++++--------- 2 files changed, 64 insertions(+), 22 deletions(-) diff --git a/components/ModalTestbed.vue b/components/ModalTestbed.vue index d6df19c56..fc3e26729 100644 --- a/components/ModalTestbed.vue +++ b/components/ModalTestbed.vue @@ -1,7 +1,9 @@ diff --git a/components/ReportModal.spec.js b/components/ReportModal.spec.js index 92f03cd33..e94fe4b15 100644 --- a/components/ReportModal.spec.js +++ b/components/ReportModal.spec.js @@ -3,6 +3,7 @@ import ReportModal from './ReportModal.vue' import ModalTestbed from './ModalTestbed.vue' import Vue from 'vue' import Vuex from 'vuex' +import { getters, mutations } from '../store/modal' import Styleguide from '@human-connection/styleguide' import portal from 'portal-vue' @@ -14,24 +15,19 @@ localVue.use(portal) describe('ReportModal.vue', () => { let Wrapper - let getters let store + let state let mocks let $apollo beforeEach(() => { - getters = { - 'modal/data': () => { - return { - success: false, - loading: false, - disabled: false - } - } - } $apollo = { mutate: jest.fn().mockResolvedValue(null) } + state = { + open: 'report', + data: {} + } }) describe('mount', () => { @@ -45,33 +41,79 @@ describe('ReportModal.vue', () => { $apollo } store = new Vuex.Store({ - getters + state, + getters: { + 'modal/open': getters.open, + 'modal/data': getters.data + }, + mutations: { + 'modal/SET_OPEN': mutations.SET_OPEN + } }) return mount(ModalTestbed, { store, mocks, localVue }) } + beforeEach(() => { + // TODO find out why on earth do we have to call Wrapper() at least twice? + // TODO this is a nasty side effect and we have non-atomic tests here + Wrapper() + }) + it('renders', () => { expect(Wrapper().is('div')).toBe(true) }) describe('modal visible', () => { describe('shows a report', () => { + let wrapper beforeEach(() => { - getters['modal/open'] = () => 'report' + state = { + open: 'report', + data: {} + } + wrapper = Wrapper() + }) + + describe('by default', () => { + it('buttons enabled', () => { + const expected = { disabled: 'disabled' } + const cancelButton = wrapper.findAll('#portal footer button').at(0) + const confirmButton = wrapper.findAll('#portal footer button').at(1) + expect(cancelButton.attributes().disabled).toBeUndefined() + expect(confirmButton.attributes().disabled).toBeUndefined() + }) }) describe('click confirm button', () => { - let wrapper - - beforeEach(() => { - wrapper = Wrapper() + const clickAction = () => { const confirmButton = wrapper.find('.ds-button-danger') confirmButton.trigger('click') - }) + } it('calls report mutation', () => { + clickAction() expect($apollo.mutate).toHaveBeenCalled() }) + + it.todo('hides modal') + + it('disables buttons', () => { + const expected = { disabled: 'disabled' } + // TODO: `wrapper.findAll` behaves in a very odd way + // if I call find or findAll first to check the initial attributes + // the attributes won't change anymore. Seems to be a caching + // problem here. I made a workaround by checking the inital + // in a separate test case above. + clickAction() + const cancelButton = wrapper.findAll('#portal footer button').at(0) + const confirmButton = wrapper.findAll('#portal footer button').at(1) + expect(cancelButton.attributes()).toEqual( + expect.objectContaining(expected) + ) + expect(confirmButton.attributes()).toEqual( + expect.objectContaining(expected) + ) + }) }) }) }) @@ -83,9 +125,7 @@ describe('ReportModal.vue', () => { $t: () => {}, $apollo } - store = new Vuex.Store({ - getters - }) + store = new Vuex.Store({}) return shallowMount(ReportModal, { store, mocks, localVue }) } From 2831af469a29c6e4b8894683e6c0736cc1935a67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Sat, 9 Mar 2019 01:54:25 +0100 Subject: [PATCH 15/65] Remove all code related to vue-portal --- components/ModalTestbed.vue | 19 ------------------- components/ReportModal.spec.js | 13 +++++-------- layouts/default.vue | 3 --- nuxt.config.js | 3 +-- package.json | 1 - 5 files changed, 6 insertions(+), 33 deletions(-) delete mode 100644 components/ModalTestbed.vue diff --git a/components/ModalTestbed.vue b/components/ModalTestbed.vue deleted file mode 100644 index fc3e26729..000000000 --- a/components/ModalTestbed.vue +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/components/ReportModal.spec.js b/components/ReportModal.spec.js index e94fe4b15..a23df3baa 100644 --- a/components/ReportModal.spec.js +++ b/components/ReportModal.spec.js @@ -1,17 +1,14 @@ import { shallowMount, render, mount, createLocalVue } from '@vue/test-utils' import ReportModal from './ReportModal.vue' -import ModalTestbed from './ModalTestbed.vue' import Vue from 'vue' import Vuex from 'vuex' import { getters, mutations } from '../store/modal' import Styleguide from '@human-connection/styleguide' -import portal from 'portal-vue' const localVue = createLocalVue() localVue.use(Vuex) localVue.use(Styleguide) -localVue.use(portal) describe('ReportModal.vue', () => { let Wrapper @@ -50,7 +47,7 @@ describe('ReportModal.vue', () => { 'modal/SET_OPEN': mutations.SET_OPEN } }) - return mount(ModalTestbed, { store, mocks, localVue }) + return mount(ReportModal, { store, mocks, localVue }) } beforeEach(() => { @@ -77,8 +74,8 @@ describe('ReportModal.vue', () => { describe('by default', () => { it('buttons enabled', () => { const expected = { disabled: 'disabled' } - const cancelButton = wrapper.findAll('#portal footer button').at(0) - const confirmButton = wrapper.findAll('#portal footer button').at(1) + const cancelButton = wrapper.findAll('footer button').at(0) + const confirmButton = wrapper.findAll('footer button').at(1) expect(cancelButton.attributes().disabled).toBeUndefined() expect(confirmButton.attributes().disabled).toBeUndefined() }) @@ -105,8 +102,8 @@ describe('ReportModal.vue', () => { // problem here. I made a workaround by checking the inital // in a separate test case above. clickAction() - const cancelButton = wrapper.findAll('#portal footer button').at(0) - const confirmButton = wrapper.findAll('#portal footer button').at(1) + const cancelButton = wrapper.findAll('footer button').at(0) + const confirmButton = wrapper.findAll('footer button').at(1) expect(cancelButton.attributes()).toEqual( expect.objectContaining(expected) ) diff --git a/layouts/default.vue b/layouts/default.vue index 7283bf308..00d33d6e8 100644 --- a/layouts/default.vue +++ b/layouts/default.vue @@ -92,9 +92,6 @@

- - - diff --git a/nuxt.config.js b/nuxt.config.js index dfe6ceef8..744768aab 100644 --- a/nuxt.config.js +++ b/nuxt.config.js @@ -116,8 +116,7 @@ module.exports = { 'cookie-universal-nuxt', '@nuxtjs/apollo', '@nuxtjs/axios', - '@nuxtjs/style-resources', - 'portal-vue/nuxt' + '@nuxtjs/style-resources' ], /* diff --git a/package.json b/package.json index 57b2d402b..4269a29ec 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,6 @@ "linkify-it": "~2.1.0", "nuxt": "~2.4.5", "nuxt-env": "~0.1.0", - "portal-vue": "~1.5.1", "string-hash": "^1.1.3", "tiptap": "^1.14.0", "tiptap-extensions": "^1.13.0", From 525da7a30321bb8f04f744f5265f42fe429e476a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Sat, 9 Mar 2019 01:58:00 +0100 Subject: [PATCH 16/65] Without `vue-portal` all the oddities vanish CC @Tirokk @mattwr18 @appinteractive Major breakthrough: If I remove `vue-portal` entirely from the styleguide, problem solved. Not only that we can remove the TODOs from the tests. Even wrappers of subcomponents get updated when I interact with the root component. What a bliss :joy: Example code: ```js let button = wrapper.find('div div div button') expect(button.attributes()).toEqual({disabled: 'disabled'}) wrapper.doSomeAction() expect(button.attributes()).toEqual({}) ``` --- components/ReportModal.spec.js | 27 ++++----------------------- 1 file changed, 4 insertions(+), 23 deletions(-) diff --git a/components/ReportModal.spec.js b/components/ReportModal.spec.js index a23df3baa..a64424ea8 100644 --- a/components/ReportModal.spec.js +++ b/components/ReportModal.spec.js @@ -50,12 +50,6 @@ describe('ReportModal.vue', () => { return mount(ReportModal, { store, mocks, localVue }) } - beforeEach(() => { - // TODO find out why on earth do we have to call Wrapper() at least twice? - // TODO this is a nasty side effect and we have non-atomic tests here - Wrapper() - }) - it('renders', () => { expect(Wrapper().is('div')).toBe(true) }) @@ -71,16 +65,6 @@ describe('ReportModal.vue', () => { wrapper = Wrapper() }) - describe('by default', () => { - it('buttons enabled', () => { - const expected = { disabled: 'disabled' } - const cancelButton = wrapper.findAll('footer button').at(0) - const confirmButton = wrapper.findAll('footer button').at(1) - expect(cancelButton.attributes().disabled).toBeUndefined() - expect(confirmButton.attributes().disabled).toBeUndefined() - }) - }) - describe('click confirm button', () => { const clickAction = () => { const confirmButton = wrapper.find('.ds-button-danger') @@ -96,14 +80,11 @@ describe('ReportModal.vue', () => { it('disables buttons', () => { const expected = { disabled: 'disabled' } - // TODO: `wrapper.findAll` behaves in a very odd way - // if I call find or findAll first to check the initial attributes - // the attributes won't change anymore. Seems to be a caching - // problem here. I made a workaround by checking the inital - // in a separate test case above. + let cancelButton = wrapper.findAll('footer button').at(0) + let confirmButton = wrapper.findAll('footer button').at(1) + expect(cancelButton.attributes().disabled).toBeUndefined() + expect(confirmButton.attributes().disabled).toBeUndefined() clickAction() - const cancelButton = wrapper.findAll('footer button').at(0) - const confirmButton = wrapper.findAll('footer button').at(1) expect(cancelButton.attributes()).toEqual( expect.objectContaining(expected) ) From 48732c50b5b43aef8922a826649e084192347a46 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Fri, 8 Mar 2019 17:22:18 +0000 Subject: [PATCH 17/65] Bump vue-jest from 3.0.3 to 3.0.4 Bumps [vue-jest](https://github.com/eddyerburgh/vue-jest) from 3.0.3 to 3.0.4. - [Release notes](https://github.com/eddyerburgh/vue-jest/releases) - [Commits](https://github.com/eddyerburgh/vue-jest/commits) Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 4269a29ec..1d1a0cbaa 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "nodemon": "~1.18.10", "prettier": "~1.14.3", "sass-loader": "~7.1.0", - "vue-jest": "~3.0.3", + "vue-jest": "~3.0.4", "vue-svg-loader": "~0.11.0" } } diff --git a/yarn.lock b/yarn.lock index a8aea8081..2cdc53bff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12243,10 +12243,10 @@ vue-izitoast@1.1.2: dependencies: izitoast "^1.3.0" -vue-jest@~3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/vue-jest/-/vue-jest-3.0.3.tgz#80f664712f2678b1d8bb3af0f2c0bef5efa8de31" - integrity sha512-QwFQjkv2vXYPKUkNZkMbV/ZTHyQhRM1JY8nP68dRLQmdvCN+VUEKhlByH/PgPqDr2p/NuhaM3PUjJ9nreR++3w== +vue-jest@~3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/vue-jest/-/vue-jest-3.0.4.tgz#b6a2b0d874968f26fa775ac901903fece531e08b" + integrity sha512-PY9Rwt4OyaVlA+KDJJ0614CbEvNOkffDI9g9moLQC/2DDoo0YrqZm7dHi13Q10uoK5Nt5WCYFdeAheOExPah0w== dependencies: babel-plugin-transform-es2015-modules-commonjs "^6.26.0" chalk "^2.1.0" From 61f6e8d7c2b89a5ab64fbb0ec785b4a3acb785c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Fri, 8 Mar 2019 19:26:40 +0000 Subject: [PATCH 18/65] Bump babel-jest from 24.1.0 to 24.3.1 Bumps [babel-jest](https://github.com/facebook/jest/tree/HEAD/packages/babel-jest) from 24.1.0 to 24.3.1. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v24.3.1/packages/babel-jest) Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 284 +++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 254 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index 1d1a0cbaa..3b49fbc5c 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "@vue/test-utils": "~1.0.0-beta.29", "babel-core": "~7.0.0-bridge.0", "babel-eslint": "~10.0.1", - "babel-jest": "~24.1.0", + "babel-jest": "~24.3.1", "cypress-cucumber-preprocessor": "~1.11.0", "eslint": "~5.15.1", "eslint-config-prettier": "~3.6.0", diff --git a/yarn.lock b/yarn.lock index 2cdc53bff..14a19f299 100644 --- a/yarn.lock +++ b/yarn.lock @@ -850,6 +850,14 @@ lodash "^4.17.11" to-fast-properties "^2.0.0" +"@cnakazawa/watch@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" + integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + "@csstools/convert-colors@^1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" @@ -902,6 +910,73 @@ portal-vue "~1.5.1" vue "~2.6.7" +"@jest/console@^24.3.0": + version "24.3.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.3.0.tgz#7bd920d250988ba0bf1352c4493a48e1cb97671e" + integrity sha512-NaCty/OOei6rSDcbPdMiCbYCI0KGFGPgGO6B09lwWt5QTxnkuhKYET9El5u5z1GAcSxkQmSMtM63e24YabCWqA== + dependencies: + "@jest/source-map" "^24.3.0" + "@types/node" "*" + chalk "^2.0.1" + slash "^2.0.0" + +"@jest/fake-timers@^24.3.0": + version "24.3.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.3.0.tgz#0a7f8b877b78780c3fa5c3f8683cc0aaf9488331" + integrity sha512-rHwVI17dGMHxHzfAhnZ04+wFznjFfZ246QugeBnbiYr7/bDosPD2P1qeNjWnJUUcfl0HpS6kkr+OB/mqSJxQFg== + dependencies: + "@jest/types" "^24.3.0" + "@types/node" "*" + jest-message-util "^24.3.0" + jest-mock "^24.3.0" + +"@jest/source-map@^24.3.0": + version "24.3.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.3.0.tgz#563be3aa4d224caf65ff77edc95cd1ca4da67f28" + integrity sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.1.15" + source-map "^0.6.0" + +"@jest/test-result@^24.3.0": + version "24.3.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.3.0.tgz#4c0b1c9716212111920f7cf8c4329c69bc81924a" + integrity sha512-j7UZ49T8C4CVipEY99nLttnczVTtLyVzFfN20OiBVn7awOs0U3endXSTq7ouPrLR5y4YjI5GDcbcvDUjgeamzg== + dependencies: + "@jest/console" "^24.3.0" + "@jest/types" "^24.3.0" + "@types/istanbul-lib-coverage" "^1.1.0" + +"@jest/transform@^24.3.1": + version "24.3.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.3.1.tgz#ce9e1329eb5e640f493bcd5c8eb9970770959bfc" + integrity sha512-PpjylI5goT4Si69+qUjEeHuKjex0LjjrqJzrMYzlOZn/+SCumGKuGC0UQFeEPThyGsFvWH1Q4gj0R66eOHnIpw== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^24.3.0" + babel-plugin-istanbul "^5.1.0" + chalk "^2.0.1" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.1.15" + jest-haste-map "^24.3.1" + jest-regex-util "^24.3.0" + jest-util "^24.3.0" + micromatch "^3.1.10" + realpath-native "^1.1.0" + slash "^2.0.0" + source-map "^0.6.1" + write-file-atomic "2.4.1" + +"@jest/types@^24.3.0": + version "24.3.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.3.0.tgz#3f6e117e47248a9a6b5f1357ec645bd364f7ad23" + integrity sha512-VoO1F5tU2n/93QN/zaZ7Q8SeV/Rj+9JJOgbvKbBwy4lenvmdj1iDaQEPXGTKrO6OSvDeb2drTFipZJYxgo6kIQ== + dependencies: + "@types/istanbul-lib-coverage" "^1.1.0" + "@types/yargs" "^12.0.9" + "@nuxt/babel-preset-app@2.4.5": version "2.4.5" resolved "https://registry.yarnpkg.com/@nuxt/babel-preset-app/-/babel-preset-app-2.4.5.tgz#707043fe4686b7375df0917cca9134b7681ae9bf" @@ -1236,6 +1311,39 @@ dependencies: "@types/node" "*" +"@types/babel__core@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.0.tgz#710f2487dda4dcfd010ca6abb2b4dc7394365c51" + integrity sha512-wJTeJRt7BToFx3USrCDs2BhEi4ijBInTQjOIukj6a/5tEkwpFMVZ+1ppgmE+Q/FQyc5P/VWUbx7I9NELrKruHA== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.0.2.tgz#d2112a6b21fad600d7674274293c85dce0cb47fc" + integrity sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" + integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.6.tgz#328dd1a8fc4cfe3c8458be9477b219ea158fd7b2" + integrity sha512-XYVgHF2sQ0YblLRMLNPB3CkFMewzFmlDsH/TneZFHUXDlABQgh88uOxuez7ZcXxayLFrqLwtDH1t+FmlFwNZxw== + dependencies: + "@babel/types" "^7.3.0" + "@types/blob-util@1.3.3": version "1.3.3" resolved "https://registry.yarnpkg.com/@types/blob-util/-/blob-util-1.3.3.tgz#adba644ae34f88e1dd9a5864c66ad651caaf628a" @@ -1313,6 +1421,11 @@ "@types/express-serve-static-core" "*" "@types/serve-static" "*" +"@types/istanbul-lib-coverage@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#2cc2ca41051498382b43157c8227fea60363f94a" + integrity sha512-ohkhb9LehJy+PA40rDtGAji61NCgdtKLAlFoYp4cnuuQEswwdK3vz9SOIkkyc3wrk8dzjphQApNs56yyXLStaQ== + "@types/jquery@*": version "3.3.29" resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.3.29.tgz#680a2219ce3c9250483722fccf5570d1e2d08abd" @@ -1406,6 +1519,11 @@ resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47" integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg== +"@types/stack-utils@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" + integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== + "@types/strip-bom@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" @@ -1424,6 +1542,11 @@ "@types/events" "*" "@types/node" "*" +"@types/yargs@^12.0.9": + version "12.0.9" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.9.tgz#693e76a52f61a2f1e7fb48c0eef167b95ea4ffd0" + integrity sha512-sCZy4SxP9rN2w30Hlmg5dtdRwgYQfYRiLo9usw8X9cxlf+H4FqM1xX7+sNH7NNKVdbXMJWqva7iyy+fxh/V7fA== + "@types/zen-observable@^0.8.0": version "0.8.0" resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.0.tgz#8b63ab7f1aa5321248aad5ac890a485656dcea4d" @@ -2379,13 +2502,16 @@ babel-eslint@~10.0.1: eslint-scope "3.7.1" eslint-visitor-keys "^1.0.0" -babel-jest@^24.1.0, babel-jest@~24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.1.0.tgz#441e23ef75ded3bd547e300ac3194cef87b55190" - integrity sha512-MLcagnVrO9ybQGLEfZUqnOzv36iQzU7Bj4elm39vCukumLVSfoX+tRy3/jW7lUKc7XdpRmB/jech6L/UCsSZjw== +babel-jest@^24.1.0, babel-jest@~24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.3.1.tgz#168468a37e90426520c5293da4f55e1a512063b0" + integrity sha512-6KaXyUevY0KAxD5Ba+EBhyfwvc+R2f7JV7BpBZ5T8yJGgj0M1hYDfRhDq35oD5MzprMf/ggT81nEuLtMyxfDIg== dependencies: + "@jest/transform" "^24.3.1" + "@jest/types" "^24.3.0" + "@types/babel__core" "^7.1.0" babel-plugin-istanbul "^5.1.0" - babel-preset-jest "^24.1.0" + babel-preset-jest "^24.3.0" chalk "^2.4.2" slash "^2.0.0" @@ -2422,10 +2548,12 @@ babel-plugin-istanbul@^5.1.0: istanbul-lib-instrument "^3.0.0" test-exclude "^5.0.0" -babel-plugin-jest-hoist@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.1.0.tgz#dfecc491fb15e2668abbd690a697a8fd1411a7f8" - integrity sha512-gljYrZz8w1b6fJzKcsfKsipSru2DU2DmQ39aB6nV3xQ0DDv3zpIzKGortA5gknrhNnPN8DweaEgrnZdmbGmhnw== +babel-plugin-jest-hoist@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.3.0.tgz#f2e82952946f6e40bb0a75d266a3790d854c8b5b" + integrity sha512-nWh4N1mVH55Tzhx2isvUN5ebM5CDUvIpXPZYMRazQughie/EqGnbR+czzoQlhUmJG9pPJmYDRhvocotb2THl1w== + dependencies: + "@types/babel__traverse" "^7.0.6" babel-plugin-transform-es2015-modules-commonjs@^6.26.0: version "6.26.2" @@ -2445,13 +2573,13 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-preset-jest@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.1.0.tgz#83bc564fdcd4903641af65ec63f2f5de6b04132e" - integrity sha512-FfNLDxFWsNX9lUmtwY7NheGlANnagvxq8LZdl5PKnVG3umP+S/g0XbVBfwtA4Ai3Ri/IMkWabBz3Tyk9wdspcw== +babel-preset-jest@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.3.0.tgz#db88497e18869f15b24d9c0e547d8e0ab950796d" + integrity sha512-VGTV2QYBa/Kn3WCOKdfS31j9qomaXSgJqi65B6o05/1GsJyj9LVhSljM9ro4S+IBGj/ENhNBuH9bpqzztKAQSw== dependencies: "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - babel-plugin-jest-hoist "^24.1.0" + babel-plugin-jest-hoist "^24.3.0" babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" @@ -4973,6 +5101,11 @@ exec-sh@^0.2.0: dependencies: merge "^1.2.0" +exec-sh@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" + integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== + execa@0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" @@ -6971,6 +7104,21 @@ jest-haste-map@^24.0.0: micromatch "^3.1.10" sane "^3.0.0" +jest-haste-map@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.3.1.tgz#b4a66dbe1e6bc45afb9cd19c083bff81cdd535a1" + integrity sha512-OTMQle+astr1lWKi62Ccmk2YWn6OtUoU/8JpJdg8zdsnpFIry/k0S4sQ4nWocdM07PFdvqcthWc78CkCE6sXvA== + dependencies: + "@jest/types" "^24.3.0" + fb-watchman "^2.0.0" + graceful-fs "^4.1.15" + invariant "^2.2.4" + jest-serializer "^24.3.0" + jest-util "^24.3.0" + jest-worker "^24.3.1" + micromatch "^3.1.10" + sane "^4.0.3" + jest-jasmine2@^24.1.0: version "24.1.0" resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.1.0.tgz#8377324b967037c440f0a549ee0bbd9912055db6" @@ -7017,16 +7165,42 @@ jest-message-util@^24.0.0: slash "^2.0.0" stack-utils "^1.0.1" +jest-message-util@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.3.0.tgz#e8f64b63ebc75b1a9c67ee35553752596e70d4a9" + integrity sha512-lXM0YgKYGqN5/eH1NGw4Ix+Pk2I9Y77beyRas7xM24n+XTTK3TbT0VkT3L/qiyS7WkW0YwyxoXnnAaGw4hsEDA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/test-result" "^24.3.0" + "@jest/types" "^24.3.0" + "@types/stack-utils" "^1.0.1" + chalk "^2.0.1" + micromatch "^3.1.10" + slash "^2.0.0" + stack-utils "^1.0.1" + jest-mock@^24.0.0: version "24.0.0" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.0.0.tgz#9a4b53e01d66a0e780f7d857462d063e024c617d" integrity sha512-sQp0Hu5fcf5NZEh1U9eIW2qD0BwJZjb63Yqd98PQJFvf/zzUTBoUAwv/Dc/HFeNHIw1f3hl/48vNn+j3STaI7A== +jest-mock@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.3.0.tgz#95a86b6ad474e3e33227e6dd7c4ff6b07e18d3cb" + integrity sha512-AhAo0qjbVWWGvcbW5nChFjR0ObQImvGtU6DodprNziDOt+pP0CBdht/sYcNIOXeim8083QUi9bC8QdKB8PTK4Q== + dependencies: + "@jest/types" "^24.3.0" + jest-regex-util@^24.0.0: version "24.0.0" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.0.0.tgz#4feee8ec4a358f5bee0a654e94eb26163cb9089a" integrity sha512-Jv/uOTCuC+PY7WpJl2mpoI+WbY2ut73qwwO9ByJJNwOCwr1qWhEW2Lyi2S9ZewUdJqeVpEBisdEVZSI+Zxo58Q== +jest-regex-util@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.3.0.tgz#d5a65f60be1ae3e310d5214a0307581995227b36" + integrity sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg== + jest-resolve-dependencies@^24.1.0: version "24.1.0" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.1.0.tgz#78f738a2ec59ff4d00751d9da56f176e3f589f6c" @@ -7097,6 +7271,11 @@ jest-serializer@^24.0.0: resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.0.0.tgz#522c44a332cdd194d8c0531eb06a1ee5afb4256b" integrity sha512-9FKxQyrFgHtx3ozU+1a8v938ILBE7S8Ko3uiAVjT8Yfi2o91j/fj81jacCQZ/Ihjiff/VsUCXVgQ+iF1XdImOw== +jest-serializer@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.3.0.tgz#074e307300d1451617cf2630d11543ee4f74a1c8" + integrity sha512-RiSpqo2OFbVLJN/PgAOwQIUeHDfss6NBUDTLhjiJM8Bb5rMrwRqHfkaqahIsOf9cXXB5UjcqDCzbQ7AIoMqWkg== + jest-snapshot@^24.1.0: version "24.1.0" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.1.0.tgz#85e22f810357aa5994ab61f236617dc2205f2f5b" @@ -7127,6 +7306,25 @@ jest-util@^24.0.0: slash "^2.0.0" source-map "^0.6.0" +jest-util@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.3.0.tgz#a549ae9910fedbd4c5912b204bb1bcc122ea0057" + integrity sha512-eKIAC+MTKWZthUUVOwZ3Tc5a0cKMnxalQHr6qZ4kPzKn6k09sKvsmjCygqZ1SxVVfUKoa8Sfn6XDv9uTJ1iXTg== + dependencies: + "@jest/console" "^24.3.0" + "@jest/fake-timers" "^24.3.0" + "@jest/source-map" "^24.3.0" + "@jest/test-result" "^24.3.0" + "@jest/types" "^24.3.0" + "@types/node" "*" + callsites "^3.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.15" + is-ci "^2.0.0" + mkdirp "^0.5.1" + slash "^2.0.0" + source-map "^0.6.0" + jest-validate@^24.0.0: version "24.0.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.0.0.tgz#aa8571a46983a6538328fef20406b4a496b6c020" @@ -7156,6 +7354,15 @@ jest-worker@^24.0.0: merge-stream "^1.0.1" supports-color "^6.1.0" +jest-worker@^24.3.1: + version "24.3.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.3.1.tgz#c1759dd2b1d5541b09a2e5e1bc3288de6c9d8632" + integrity sha512-ZCoAe/iGLzTJvWHrO8fyx3bmEQhpL16SILJmWHKe8joHhyF3z00psF1sCRT54DoHw5GJG0ZpUtGy+ylvwA4haA== + dependencies: + "@types/node" "*" + merge-stream "^1.0.1" + supports-color "^6.1.0" + jest@~24.1.0: version "24.1.0" resolved "https://registry.yarnpkg.com/jest/-/jest-24.1.0.tgz#b1e1135caefcf2397950ecf7f90e395fde866fd2" @@ -9866,10 +10073,10 @@ prosemirror-gapcursor@^1.0.3: prosemirror-state "^1.0.0" prosemirror-view "^1.0.0" -prosemirror-history@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/prosemirror-history/-/prosemirror-history-1.0.3.tgz#5fb8591adfc272afaaf0b41bec64ee7d9522a118" - integrity sha512-IfFGbhafSx+R3aq7nLJGkXeu2iaUiP8mkU3aRu2uQcIIjU8Fq7RJfuvhIOJ2RNUoSyqF/ANkdTjnZ74F5eHs1Q== +prosemirror-history@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prosemirror-history/-/prosemirror-history-1.0.4.tgz#313a15489a78795321f3a37d53d8c68610c5adb6" + integrity sha512-Kk2UisC9EzYcsNv+ILiQJWpsu0rbT6+oAAkvseFUHnudtfkmYAJu1+Xp3F0xTTCVmQdSqSLVk8qydllXUUOU4Q== dependencies: prosemirror-state "^1.2.2" prosemirror-transform "^1.0.0" @@ -9932,12 +10139,12 @@ prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0: dependencies: prosemirror-model "^1.0.0" -prosemirror-utils@^0.7.5, prosemirror-utils@^0.7.6: +prosemirror-utils@^0.7.6: version "0.7.6" resolved "https://registry.yarnpkg.com/prosemirror-utils/-/prosemirror-utils-0.7.6.tgz#c462ddfbf2452e56e4b25d1f02b34caccddb0f33" integrity sha512-vzsCBTiJ56R3nRDpIJnKOJzsZP7KFO8BkXk7zvQgQiXpml2o/djPCRhuyaFc7VTqSHlLPQHVI1feTLAwHp+prQ== -prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.7.1, prosemirror-view@^1.8.3: +prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.8.3: version "1.8.3" resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.8.3.tgz#f8deff22c7d371f63db2686ac6f3661ded1b3ae3" integrity sha512-CAW3SycaJgfPlWwYcDGiwNaCwcikBLSFAgLF+H+bTn0aCAUzcl2DXQdU9dMvK3HeWG+6Xn/QPQbhyyqCcV3ZBw== @@ -10213,7 +10420,7 @@ readdirp@^2.0.0, readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -realpath-native@^1.0.0, realpath-native@^1.0.2: +realpath-native@^1.0.0, realpath-native@^1.0.2, realpath-native@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== @@ -10636,6 +10843,21 @@ sane@^3.0.0: optionalDependencies: fsevents "^1.2.3" +sane@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.0.3.tgz#e878c3f19e25cc57fbb734602f48f8a97818b181" + integrity sha512-hSLkC+cPHiBQs7LSyXkotC3UUtyn8C4FMn50TNaacRyvBlI+3ebcxMpqckmTdtXVtel87YS7GXN3UIOj7NiGVQ== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^1.2.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + sass-graph@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" @@ -11602,7 +11824,7 @@ timsort@^0.3.0: resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= -tiptap-commands@^1.6.0, tiptap-commands@^1.7.0: +tiptap-commands@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/tiptap-commands/-/tiptap-commands-1.7.0.tgz#d15cec2cb09264b5c1f6f712dab8819bb9ab7e13" integrity sha512-JhgvBPIhGnisEdxD6gmM3U76BUlKF9n1LW1X/dO1AUOsm3Xc9tQB5BIOV/DpZTvrjntLP3AUTfd+yJeRIz5CPA== @@ -11614,18 +11836,18 @@ tiptap-commands@^1.6.0, tiptap-commands@^1.7.0: tiptap-utils "^1.3.0" tiptap-extensions@^1.13.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/tiptap-extensions/-/tiptap-extensions-1.13.0.tgz#1c78223d68f4c321909c5448764d2b5a32bad7f3" - integrity sha512-56y5uXAnkdZ/9MmTuk2fmbglUwmfECVOz2DZh/5OI5nsPclVNk+OFjNFEbZ91rb3fC4NOtFdfNQVKyqrBe9pNA== + version "1.14.0" + resolved "https://registry.yarnpkg.com/tiptap-extensions/-/tiptap-extensions-1.14.0.tgz#5517afd1ca556715a8cce6c022c88584a762004a" + integrity sha512-WzYukrUHGGjCi3+F156LEVn5R58Pw1F6zKHT2o4SMHuv0LrWTIJK1XsDv8uwi/szfTlXm9BJ4MKmRbDulBeioQ== dependencies: lowlight "^1.11.0" - prosemirror-history "^1.0.3" + prosemirror-history "^1.0.4" prosemirror-state "^1.2.2" prosemirror-tables "^0.7.10" - prosemirror-utils "^0.7.5" - prosemirror-view "^1.7.1" - tiptap "^1.13.0" - tiptap-commands "^1.6.0" + prosemirror-utils "^0.7.6" + prosemirror-view "^1.8.3" + tiptap "^1.14.0" + tiptap-commands "^1.7.0" tiptap-utils@^1.3.0: version "1.3.0" @@ -11637,7 +11859,7 @@ tiptap-utils@^1.3.0: prosemirror-tables "^0.7.9" prosemirror-utils "^0.7.6" -tiptap@^1.13.0, tiptap@^1.14.0: +tiptap@^1.14.0: version "1.14.0" resolved "https://registry.yarnpkg.com/tiptap/-/tiptap-1.14.0.tgz#8dd84b199533e08f0dcc34b39d517ea73e20fb95" integrity sha512-38gCYeJx5O83oTnpfgMGGrjem1ZNDK2waaUMq+bkYPaQwvvtyMDGffvEIT9/jcLvA+WYfaNp8BWnn1rqNpYKxA== From 54c6fe1332923ddce2a64fb507b91d88a1131879 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Fri, 8 Mar 2019 21:45:59 +0000 Subject: [PATCH 19/65] Bump tiptap-extensions from 1.13.0 to 1.14.0 Bumps [tiptap-extensions](https://github.com/scrumpy/tiptap) from 1.13.0 to 1.14.0. - [Release notes](https://github.com/scrumpy/tiptap/releases) - [Commits](https://github.com/scrumpy/tiptap/compare/tiptap-extensions@1.13.0...tiptap-extensions@1.14.0) Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 3b49fbc5c..236845a8e 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "nuxt-env": "~0.1.0", "string-hash": "^1.1.3", "tiptap": "^1.14.0", - "tiptap-extensions": "^1.13.0", + "tiptap-extensions": "^1.14.0", "v-tooltip": "~2.0.0-rc.33", "vue-count-to": "~1.0.13", "vue-izitoast": "1.1.2", diff --git a/yarn.lock b/yarn.lock index 14a19f299..83103d0d6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11835,7 +11835,7 @@ tiptap-commands@^1.7.0: prosemirror-state "^1.2.2" tiptap-utils "^1.3.0" -tiptap-extensions@^1.13.0: +tiptap-extensions@^1.14.0: version "1.14.0" resolved "https://registry.yarnpkg.com/tiptap-extensions/-/tiptap-extensions-1.14.0.tgz#5517afd1ca556715a8cce6c022c88584a762004a" integrity sha512-WzYukrUHGGjCi3+F156LEVn5R58Pw1F6zKHT2o4SMHuv0LrWTIJK1XsDv8uwi/szfTlXm9BJ4MKmRbDulBeioQ== From 148bd03d4df0a34326bdf8dceb3d6455ce6058ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Sat, 9 Mar 2019 12:19:21 +0100 Subject: [PATCH 20/65] Update styleguide to a version without vue-portal --- package.json | 2 +- yarn.lock | 21 ++++----------------- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index 236845a8e..b9264e08c 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ } }, "dependencies": { - "@human-connection/styleguide": "~0.5.2", + "@human-connection/styleguide": "~0.5.11", "@nuxtjs/apollo": "4.0.0-rc4", "@nuxtjs/axios": "~5.4.1", "@nuxtjs/dotenv": "~1.3.0", diff --git a/yarn.lock b/yarn.lock index 83103d0d6..025d96f23 100644 --- a/yarn.lock +++ b/yarn.lock @@ -902,13 +902,10 @@ debug "^3.1.0" lodash.once "^4.1.1" -"@human-connection/styleguide@~0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@human-connection/styleguide/-/styleguide-0.5.2.tgz#a7d05b612562cfbe4377032bdf32df4a8f0e3f45" - integrity sha512-8RSQDv6hRvdToQKtOGv+aNA/lfrNu+eNDy/JBaynJN7bB7veNgQ0XGt9Otq1KmdW2nthWrwsnZLTRaUaGqyAZw== - dependencies: - portal-vue "~1.5.1" - vue "~2.6.7" +"@human-connection/styleguide@~0.5.11": + version "0.5.11" + resolved "https://registry.yarnpkg.com/@human-connection/styleguide/-/styleguide-0.5.11.tgz#8e44b5560a27ff87175c438baaee2645045030ae" + integrity sha512-djN4VnbeP4p6z8svlni68g7ST41qzxazwq3t2ygg4qTLEZLyOUopZW9++PST9s2YEQ97cNR1PyqnC6QGhBqMUA== "@jest/console@^24.3.0": version "24.3.0" @@ -9305,11 +9302,6 @@ popper.js@^1.12.9: resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.14.7.tgz#e31ec06cfac6a97a53280c3e55e4e0c860e7738e" integrity sha512-4q1hNvoUre/8srWsH7hnoSJ5xVmIL4qgz+s4qf2TnJIMyZFUFMGH+9vE7mXynAlHSZ/NdTmmow86muD0myUkVQ== -portal-vue@~1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/portal-vue/-/portal-vue-1.5.1.tgz#6bed79ef168d9676bb79f41d43c5cd4cedf54dbc" - integrity sha512-7T0K+qyY8bnjnEpQTiLbGsUaGlFcemK9gLurVSr6x1/qzr2HkHDNCOz5i+xhuTD1CrXckf/AGeCnLzvmAHMOHw== - posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -12570,11 +12562,6 @@ vue@^2.5.22: resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.6.tgz#dde41e483c11c46a7bf523909f4f2f816ab60d25" integrity sha512-Y2DdOZD8sxApS+iUlwv1v8U1qN41kq6Kw45lM6nVZKhygeWA49q7VCCXkjXqeDBXgurrKWkYQ9cJeEJwAq0b9Q== -vue@~2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.7.tgz#254f188e7621d2d19ee28d0c0442c6d21b53ae2d" - integrity sha512-g7ADfQ82QU+j6F/bVDioVQf2ccIMYLuR4E8ev+RsDBlmwRkhGO3HhgF4PF9vpwjdPpxyb1zzLur2nQ2oIMAMEg== - vuex-i18n@~1.11.0: version "1.11.0" resolved "https://registry.yarnpkg.com/vuex-i18n/-/vuex-i18n-1.11.0.tgz#e6cdc95080c445ab2c211cc6b64a907d217639d3" From 03422920a272a57e670d56219dfc3236a5774dea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Sat, 9 Mar 2019 14:17:48 +0100 Subject: [PATCH 21/65] Start to implement wrapper modal --- components/Modal.spec.js | 64 ++++++++++++++++++++++++++++++++++++++++ components/Modal.vue | 24 +++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 components/Modal.spec.js create mode 100644 components/Modal.vue diff --git a/components/Modal.spec.js b/components/Modal.spec.js new file mode 100644 index 000000000..367304ba4 --- /dev/null +++ b/components/Modal.spec.js @@ -0,0 +1,64 @@ +import { mount, createLocalVue } from '@vue/test-utils' +import Modal from './Modal.vue' +import Vue from 'vue' +import Vuex from 'vuex' +import { getters, mutations } from '../store/modal' +import Styleguide from '@human-connection/styleguide' + +const localVue = createLocalVue() + +localVue.use(Vuex) +localVue.use(Styleguide) + +describe('Modal.vue', () => { + let Wrapper + let store + let state + let mocks + + beforeEach(() => { + mocks = { + $t: () => {} + } + state = { + open: null, + data: {} + } + }) + + describe('mount', () => { + let wrapper + const Wrapper = () => { + store = new Vuex.Store({ + state, + getters: { + 'modal/open': getters.open, + 'modal/data': getters.data + }, + mutations: { + 'modal/SET_OPEN': mutations.SET_OPEN + } + }) + return mount(Modal, { store, mocks, localVue }) + } + + it('renders nothing', () => { + wrapper = Wrapper() + expect(wrapper.isEmpty()).toBe(true) + }) + + describe('store opens a report', () => { + beforeEach(() => { + state = { + open: 'report', + data: {} + } + wrapper = Wrapper() + }) + + it('renders report modal', () => { + expect(wrapper.contains('#modal-report')).toBe(true) + }) + }) + }) +}) diff --git a/components/Modal.vue b/components/Modal.vue new file mode 100644 index 000000000..8045212cf --- /dev/null +++ b/components/Modal.vue @@ -0,0 +1,24 @@ + + + From cdc9cd0af22b9701ead8135f74205965c221f978 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Sun, 10 Mar 2019 00:48:35 +0100 Subject: [PATCH 22/65] Await async mehtods in ReportModal.spec.js --- components/ReportModal.spec.js | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/components/ReportModal.spec.js b/components/ReportModal.spec.js index a64424ea8..d138ea61e 100644 --- a/components/ReportModal.spec.js +++ b/components/ReportModal.spec.js @@ -66,25 +66,33 @@ describe('ReportModal.vue', () => { }) describe('click confirm button', () => { - const clickAction = () => { + const clickAction = async () => { const confirmButton = wrapper.find('.ds-button-danger') - confirmButton.trigger('click') + await confirmButton.trigger('click') } - it('calls report mutation', () => { - clickAction() + it('calls report mutation', async () => { + await clickAction() expect($apollo.mutate).toHaveBeenCalled() }) - it.todo('hides modal') + it('hides modal', async () => { + expect(wrapper.find('.ds-modal-wrapper').isEmpty()).toEqual(false) + await clickAction() + expect(wrapper.find('.ds-modal-wrapper').isEmpty()).toEqual(true) + }) - it('disables buttons', () => { + it('disables buttons', async () => { const expected = { disabled: 'disabled' } let cancelButton = wrapper.findAll('footer button').at(0) let confirmButton = wrapper.findAll('footer button').at(1) - expect(cancelButton.attributes().disabled).toBeUndefined() - expect(confirmButton.attributes().disabled).toBeUndefined() - clickAction() + expect(cancelButton.attributes()).toEqual( + expect.not.objectContaining(expected) + ) + expect(confirmButton.attributes()).toEqual( + expect.not.objectContaining(expected) + ) + await clickAction() expect(cancelButton.attributes()).toEqual( expect.objectContaining(expected) ) From 61e6773e867e257a27df02122363291e8260e7ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Sun, 10 Mar 2019 00:49:01 +0100 Subject: [PATCH 23/65] Sketch a component test for DisableModal --- components/Modal/DisableModal.spec.js | 57 +++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 components/Modal/DisableModal.spec.js diff --git a/components/Modal/DisableModal.spec.js b/components/Modal/DisableModal.spec.js new file mode 100644 index 000000000..5198b1cc2 --- /dev/null +++ b/components/Modal/DisableModal.spec.js @@ -0,0 +1,57 @@ +import { shallowMount, createLocalVue } from '@vue/test-utils' +import DisableModal from './DisableModal.vue' +import Vue from 'vue' +import Styleguide from '@human-connection/styleguide' + + +const localVue = createLocalVue() + +localVue.use(Styleguide) + +describe('DisableModal.vue', () => { + let Wrapper + let store + let mocks + + beforeEach(() => { + mocks = { + $t: () => {}, + $apollo: { + mutate: jest.fn().mockResolvedValue(null) + } + } + }) + + describe('shallowMount', () => { + let wrapper + const Wrapper = () => { + return shallowMount(DisableModal, { mocks, localVue }) + } + + describe('click cancel button', () => { + beforeEach(async () => { + wrapper = Wrapper() + await wrapper.find('button.cancel').trigger('click') + }) + + it('emits close', () => { + expect(wrapper.emitted().close).toBeTruthy() + }) + + it.todo('does not call mutation') + }) + + describe('click confirm button', () => { + beforeEach(async () => { + wrapper = Wrapper() + await wrapper.find('button.confirm').trigger('click') + }) + + it('emits close', () => { + expect(wrapper.emitted().close).toBeTruthy() + }) + it.todo('calls disable mutation') + it.todo('passes id to mutation') + }) + }) +}) From ca397b6674902fe97f15557a0daa31f0eb948800 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Sun, 10 Mar 2019 01:59:09 +0100 Subject: [PATCH 24/65] Behaviour of DisableModal fully tested --- components/Modal/DisableModal.spec.js | 62 ++++++++++++++++++--------- components/Modal/DisableModal.vue | 49 +++++++++++++++++++++ 2 files changed, 90 insertions(+), 21 deletions(-) create mode 100644 components/Modal/DisableModal.vue diff --git a/components/Modal/DisableModal.spec.js b/components/Modal/DisableModal.spec.js index 5198b1cc2..e1db4a6d4 100644 --- a/components/Modal/DisableModal.spec.js +++ b/components/Modal/DisableModal.spec.js @@ -1,9 +1,8 @@ -import { shallowMount, createLocalVue } from '@vue/test-utils' +import { mount, createLocalVue } from '@vue/test-utils' import DisableModal from './DisableModal.vue' import Vue from 'vue' import Styleguide from '@human-connection/styleguide' - const localVue = createLocalVue() localVue.use(Styleguide) @@ -12,8 +11,10 @@ describe('DisableModal.vue', () => { let Wrapper let store let mocks + let propsData beforeEach(() => { + propsData = {} mocks = { $t: () => {}, $apollo: { @@ -22,36 +23,55 @@ describe('DisableModal.vue', () => { } }) - describe('shallowMount', () => { + describe('mount', () => { let wrapper const Wrapper = () => { - return shallowMount(DisableModal, { mocks, localVue }) + return mount(DisableModal, { propsData, mocks, localVue }) } - describe('click cancel button', () => { - beforeEach(async () => { - wrapper = Wrapper() - await wrapper.find('button.cancel').trigger('click') + describe('given id and opened', () => { + beforeEach(() => { + propsData = { + isOpen: true, + id: 4711 + } }) - it('emits close', () => { - expect(wrapper.emitted().close).toBeTruthy() + describe('click cancel button', () => { + beforeEach(async () => { + wrapper = Wrapper() + await wrapper.find('button.cancel').trigger('click') + }) + + it('emits close', () => { + expect(wrapper.emitted().close).toBeTruthy() + }) + + it('does not call mutation', () => { + expect(mocks.$apollo.mutate).not.toHaveBeenCalled() + }) }) - it.todo('does not call mutation') - }) + describe('click confirm button', () => { + beforeEach(async () => { + wrapper = Wrapper() + await wrapper.find('button.confirm').trigger('click') + }) - describe('click confirm button', () => { - beforeEach(async () => { - wrapper = Wrapper() - await wrapper.find('button.confirm').trigger('click') - }) + it('emits close', () => { + expect(wrapper.emitted().close).toBeTruthy() + }) - it('emits close', () => { - expect(wrapper.emitted().close).toBeTruthy() + it('calls mutation', () => { + expect(mocks.$apollo.mutate).toHaveBeenCalled() + }) + + it('passes id to mutation', () => { + const calls = mocks.$apollo.mutate.mock.calls + const [[{ variables }]] = calls + expect(variables).toEqual({ id: 4711 }) + }) }) - it.todo('calls disable mutation') - it.todo('passes id to mutation') }) }) }) diff --git a/components/Modal/DisableModal.vue b/components/Modal/DisableModal.vue new file mode 100644 index 000000000..36692763e --- /dev/null +++ b/components/Modal/DisableModal.vue @@ -0,0 +1,49 @@ + + + From b1bc46e170a1e76fd58f51b52d1e42a723b9c9be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Sun, 10 Mar 2019 03:04:45 +0100 Subject: [PATCH 25/65] DisableModal ready --- components/Modal/DisableModal.spec.js | 63 ++++++++++++++++++++++++--- components/Modal/DisableModal.vue | 51 +++++++++++++++++----- 2 files changed, 97 insertions(+), 17 deletions(-) diff --git a/components/Modal/DisableModal.spec.js b/components/Modal/DisableModal.spec.js index e1db4a6d4..920122842 100644 --- a/components/Modal/DisableModal.spec.js +++ b/components/Modal/DisableModal.spec.js @@ -1,4 +1,4 @@ -import { mount, createLocalVue } from '@vue/test-utils' +import { shallowMount, mount, createLocalVue } from '@vue/test-utils' import DisableModal from './DisableModal.vue' import Vue from 'vue' import Styleguide from '@human-connection/styleguide' @@ -8,23 +8,76 @@ const localVue = createLocalVue() localVue.use(Styleguide) describe('DisableModal.vue', () => { - let Wrapper let store let mocks let propsData + let wrapper beforeEach(() => { propsData = {} mocks = { - $t: () => {}, + $filters: { + truncate: a => a + }, + $toast: { + success: () => {}, + error: () => {} + }, + $t: jest.fn(), $apollo: { - mutate: jest.fn().mockResolvedValue(null) + mutate: jest.fn().mockResolvedValue() } } }) + describe('shallowMount', () => { + const Wrapper = () => { + return shallowMount(DisableModal, { propsData, mocks, localVue }) + } + + describe('given a user', () => { + beforeEach(() => { + propsData = { + resource: { + type: 'user', + name: 'Bob Ross' + } + } + }) + + it('mentions user name', () => { + Wrapper() + const calls = mocks.$t.mock.calls + const expected = [['disable.user.message', { name: 'Bob Ross' }]] + expect(calls).toEqual(expect.arrayContaining(expected)) + }) + }) + + describe('given a contribution', () => { + beforeEach(() => { + propsData = { + resource: { + type: 'contribution', + name: 'This is some post content.' + } + } + }) + + it('mentions contribution title', () => { + Wrapper() + const calls = mocks.$t.mock.calls + const expected = [ + [ + 'disable.contribution.message', + { name: 'This is some post content.' } + ] + ] + expect(calls).toEqual(expect.arrayContaining(expected)) + }) + }) + }) + describe('mount', () => { - let wrapper const Wrapper = () => { return mount(DisableModal, { propsData, mocks, localVue }) } diff --git a/components/Modal/DisableModal.vue b/components/Modal/DisableModal.vue index 36692763e..ceafea7c3 100644 --- a/components/Modal/DisableModal.vue +++ b/components/Modal/DisableModal.vue @@ -1,18 +1,24 @@ diff --git a/components/User.spec.js b/components/User.spec.js new file mode 100644 index 000000000..c41fa6de7 --- /dev/null +++ b/components/User.spec.js @@ -0,0 +1,78 @@ +import { config, mount, createLocalVue } from '@vue/test-utils' +import User from './User.vue' +import Vue from 'vue' +import Vuex from 'vuex' +import VTooltip from 'v-tooltip' + +import Styleguide from '@human-connection/styleguide' + +const localVue = createLocalVue() +const filter = jest.fn(str => str) + +localVue.use(Vuex) +localVue.use(VTooltip) +localVue.use(Styleguide) + +localVue.filter('truncate', filter) + +describe('User.vue', () => { + let wrapper + let Wrapper + let propsData + let mocks + let stubs + let getters + let user + + beforeEach(() => { + propsData = {} + + mocks = { + $t: jest.fn() + } + stubs = ['router-link', 'router-view'] + getters = { + 'auth/user': () => { + return {} + }, + 'auth/isModerator': () => false + } + }) + + describe('mount', () => { + const Wrapper = () => { + const store = new Vuex.Store({ + getters + }) + return mount(User, { store, propsData, mocks, stubs, localVue }) + } + + it('renders anonymous user', () => { + const wrapper = Wrapper() + expect(wrapper.text()).not.toMatch('Tilda Swinton') + expect(wrapper.text()).toMatch('Anonymus') + }) + + describe('given an user', () => { + beforeEach(() => { + propsData.user = { + name: 'Tilda Swinton', + slug: 'tilda-swinton' + } + }) + + it('renders user name', () => { + const wrapper = Wrapper() + expect(wrapper.text()).not.toMatch('Anonymous') + expect(wrapper.text()).toMatch('Tilda Swinton') + }) + + describe('user is disabled', () => { + beforeEach(() => { + propsData.user.disabled = true + }) + + }) + }) + }) +}) diff --git a/components/Author.vue b/components/User.vue similarity index 54% rename from components/Author.vue rename to components/User.vue index 54770d33d..e274c0de1 100644 --- a/components/Author.vue +++ b/components/User.vue @@ -1,6 +1,6 @@