From 3e2b9666ca0a4334a11ba866d7d3302d523b9a68 Mon Sep 17 00:00:00 2001 From: Dominic Motuka Date: Thu, 9 May 2019 16:27:27 +0300 Subject: [PATCH 001/253] More descriptive minikube setup instructions --- deployment/human-connection/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/deployment/human-connection/README.md b/deployment/human-connection/README.md index d6a2dd989..56e8c8860 100644 --- a/deployment/human-connection/README.md +++ b/deployment/human-connection/README.md @@ -6,21 +6,21 @@ just apply our provided configuration files to your cluster. ## Configuration -Copy our provided templates: +Change into the `./deployment` directory and copy our provided templates: ```bash $ cp secrets.template.yaml human-connection/secrets.yaml $ cp configmap.template.yaml human-connection/configmap.yaml ``` -Change the `configmap.yaml` as needed, all variables will be available as +Change the `configmap.yaml` in the `./deployment/human-connection` directory as needed, all variables will be available as environment variables in your deployed kubernetes pods. If you want to edit secrets, you have to `base64` encode them. See [kubernetes documentation](https://kubernetes.io/docs/concepts/configuration/secret/#creating-a-secret-manually). ```bash # example how to base64 a string: -$ echo -n 'admin' | base64 --wrap 0 +$ echo -n 'admin' | base64 YWRtaW4= ``` From 24a6ec88ad297bb7f2244a703d156de13f63bbfc Mon Sep 17 00:00:00 2001 From: Matt Rider Date: Tue, 14 May 2019 17:19:00 -0300 Subject: [PATCH 002/253] Add nuxt-dropzone, Upload component --- webapp/components/Upload.vue | 45 ++++++++++++++++++++++++++++++ webapp/package.json | 4 ++- webapp/pages/profile/_id/_slug.vue | 11 +++++--- webapp/yarn.lock | 26 +++++++++++++++++ 4 files changed, 81 insertions(+), 5 deletions(-) create mode 100644 webapp/components/Upload.vue diff --git a/webapp/components/Upload.vue b/webapp/components/Upload.vue new file mode 100644 index 000000000..332ea4557 --- /dev/null +++ b/webapp/components/Upload.vue @@ -0,0 +1,45 @@ + + + diff --git a/webapp/package.json b/webapp/package.json index 27ed779b6..8fd6767ec 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -66,6 +66,7 @@ "jsonwebtoken": "~8.5.1", "linkify-it": "~2.1.0", "nuxt": "~2.6.3", + "nuxt-dropzone": "^1.0.2", "nuxt-env": "~0.1.0", "stack-utils": "^1.0.2", "string-hash": "^1.1.3", @@ -75,6 +76,7 @@ "vue-count-to": "~1.0.13", "vue-izitoast": "1.1.2", "vue-sweetalert-icons": "~3.2.0", + "vue2-dropzone": "^3.5.9", "vuex-i18n": "~1.11.0", "zxcvbn": "^4.4.2" }, @@ -104,4 +106,4 @@ "vue-jest": "~3.0.4", "vue-svg-loader": "~0.12.0" } -} \ No newline at end of file +} diff --git a/webapp/pages/profile/_id/_slug.vue b/webapp/pages/profile/_id/_slug.vue index ecb0baa9d..11dd3278f 100644 --- a/webapp/pages/profile/_id/_slug.vue +++ b/webapp/pages/profile/_id/_slug.vue @@ -14,12 +14,13 @@ :class="{'disabled-content': user.disabled}" style="position: relative; height: auto;" > - + Date: Tue, 14 May 2019 20:57:49 -0300 Subject: [PATCH 003/253] Fix lint - still not automated --- webapp/components/Upload.vue | 6 +++--- webapp/pages/profile/_id/_slug.vue | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/webapp/components/Upload.vue b/webapp/components/Upload.vue index 332ea4557..5c491d49c 100644 --- a/webapp/components/Upload.vue +++ b/webapp/components/Upload.vue @@ -1,8 +1,8 @@ diff --git a/webapp/pages/profile/_id/_slug.vue b/webapp/pages/profile/_id/_slug.vue index 64addaa25..5f7df20ac 100644 --- a/webapp/pages/profile/_id/_slug.vue +++ b/webapp/pages/profile/_id/_slug.vue @@ -14,13 +14,14 @@ :class="{'disabled-content': user.disabled}" style="position: relative; height: auto;" > - - + + + Date: Thu, 16 May 2019 16:36:25 +0300 Subject: [PATCH 006/253] Refactor to use instead of component for images --- webapp/components/Empty.vue | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/webapp/components/Empty.vue b/webapp/components/Empty.vue index 0ae6c1973..082d18f83 100644 --- a/webapp/components/Empty.vue +++ b/webapp/components/Empty.vue @@ -5,8 +5,8 @@ :margin="margin" > - diff --git a/webapp/components/PostCard/index.vue b/webapp/components/PostCard/index.vue index acddba5d6..aeb761fe1 100644 --- a/webapp/components/PostCard/index.vue +++ b/webapp/components/PostCard/index.vue @@ -1,65 +1,64 @@ @@ -106,17 +114,16 @@ diff --git a/webapp/pages/post/_id.vue b/webapp/pages/post/_id.vue index d8fc5d4f9..ab6ec0687 100644 --- a/webapp/pages/post/_id.vue +++ b/webapp/pages/post/_id.vue @@ -41,7 +41,7 @@ const options = { } `, path: 'post', - message: 'This post could not be found' + message: 'This post could not be found', } const persistentLinks = PersistentLinks(options) @@ -57,8 +57,8 @@ export default { children: [ { name: this.$t('common.comment', null, 2), - path: `/post/${id}/${slug}#comments` - } + path: `/post/${id}/${slug}#comments`, + }, // TODO implement /* { name: this.$t('common.letsTalk'), @@ -69,20 +69,20 @@ export default { name: this.$t('common.versus'), path: `/post/${id}/${slug}#versus` } */ - ] + ], }, { name: this.$t('common.moreInfo'), - path: `/post/${id}/${slug}/more-info` - } + path: `/post/${id}/${slug}/more-info`, + }, // TODO implement /* { name: this.$t('common.takeAction'), path: `/post/${id}/${slug}/take-action` } */ ] - } - } + }, + }, } diff --git a/webapp/pages/post/_id/_slug/index.vue b/webapp/pages/post/_id/_slug/index.vue index ad04f8421..b0718f893 100644 --- a/webapp/pages/post/_id/_slug/index.vue +++ b/webapp/pages/post/_id/_slug/index.vue @@ -94,7 +94,7 @@ import HcCommentList from '~/components/comments/CommentList' export default { transition: { name: 'slide-up', - mode: 'out-in' + mode: 'out-in', }, components: { HcTag, @@ -103,31 +103,31 @@ export default { HcShoutButton, ContentMenu, HcCommentForm, - HcCommentList + HcCommentList, }, head() { return { - title: this.title + title: this.title, } }, data() { return { post: null, ready: false, - title: 'loading' + title: 'loading', } }, watch: { Post(post) { this.post = post[0] || {} this.title = this.post.title - } + }, }, async asyncData(context) { const { params, error, - app: { apolloProvider, $i18n } + app: { apolloProvider, $i18n }, } = context const client = apolloProvider.defaultClient const query = gql(` @@ -206,7 +206,7 @@ export default { `) const variables = { slug: params.slug } const { - data: { Post } + data: { Post }, } = await client.query({ query, variables }) if (Post.length <= 0) { // TODO: custom 404 error page with translations @@ -216,7 +216,7 @@ export default { const [post] = Post return { post, - title: post.title + title: post.title, } }, mounted() { @@ -229,8 +229,8 @@ export default { methods: { isAuthor(id) { return this.$store.getters['auth/user'].id === id - } - } + }, + }, } diff --git a/webapp/pages/post/_id/_slug/more-info.vue b/webapp/pages/post/_id/_slug/more-info.vue index ae03fe658..e18ab8f57 100644 --- a/webapp/pages/post/_id/_slug/more-info.vue +++ b/webapp/pages/post/_id/_slug/more-info.vue @@ -62,16 +62,16 @@ import HcEmpty from '~/components/Empty.vue' export default { transition: { name: 'slide-up', - mode: 'out-in' + mode: 'out-in', }, components: { HcPostCard, - HcEmpty + HcEmpty, }, computed: { post() { return this.Post ? this.Post[0] || {} : {} - } + }, }, apollo: { Post: { @@ -128,11 +128,11 @@ export default { }, variables() { return { - slug: this.$route.params.slug + slug: this.$route.params.slug, } - } - } - } + }, + }, + }, } diff --git a/webapp/pages/post/_id/_slug/take-action.vue b/webapp/pages/post/_id/_slug/take-action.vue index 35cbe30fc..1dfb75208 100644 --- a/webapp/pages/post/_id/_slug/take-action.vue +++ b/webapp/pages/post/_id/_slug/take-action.vue @@ -12,7 +12,7 @@ import HcEmpty from '~/components/Empty.vue' export default { components: { - HcEmpty - } + HcEmpty, + }, } diff --git a/webapp/pages/post/create.vue b/webapp/pages/post/create.vue index fd8b493d3..a110965db 100644 --- a/webapp/pages/post/create.vue +++ b/webapp/pages/post/create.vue @@ -13,12 +13,11 @@ diff --git a/webapp/pages/post/edit/_id.vue b/webapp/pages/post/edit/_id.vue index cb61e2b40..2420a85b9 100644 --- a/webapp/pages/post/edit/_id.vue +++ b/webapp/pages/post/edit/_id.vue @@ -18,7 +18,7 @@ import HcContributionForm from '~/components/ContributionForm' export default { components: { - HcContributionForm + HcContributionForm, }, computed: { user() { @@ -29,14 +29,14 @@ export default { }, contribution() { return this.Post ? this.Post[0] : {} - } + }, }, watch: { contribution() { if (this.author.id !== this.user.id) { throw new Error(`You can't edit that!`) } - } + }, }, apollo: { Post: { @@ -71,11 +71,11 @@ export default { }, variables() { return { - id: this.$route.params.id || 'p1' + id: this.$route.params.id || 'p1', } }, - fetchPolicy: 'cache-and-network' - } - } + fetchPolicy: 'cache-and-network', + }, + }, } diff --git a/webapp/pages/profile/_id.vue b/webapp/pages/profile/_id.vue index 4d436146c..992e5efce 100644 --- a/webapp/pages/profile/_id.vue +++ b/webapp/pages/profile/_id.vue @@ -24,11 +24,11 @@ const options = { } `, message: 'This user could not be found', - path: 'profile' + path: 'profile', } const persistentLinks = PersistentLinks(options) export default { - mixins: [persistentLinks] + mixins: [persistentLinks], } diff --git a/webapp/pages/profile/_id/_slug.vue b/webapp/pages/profile/_id/_slug.vue index 266a3f9c6..3dfb2c751 100644 --- a/webapp/pages/profile/_id/_slug.vue +++ b/webapp/pages/profile/_id/_slug.vue @@ -337,18 +337,18 @@ export default { HcBadges, HcLoadMore, HcEmpty, - ContentMenu + ContentMenu, }, transition: { name: 'slide-up', - mode: 'out-in' + mode: 'out-in', }, data() { return { User: [], voted: false, page: 1, - pageSize: 6 + pageSize: 6, } }, computed: { @@ -367,8 +367,7 @@ export default { }, hasMore() { return ( - this.user.contributions && - this.user.contributions.length < this.user.contributionsCount + this.user.contributions && this.user.contributions.length < this.user.contributionsCount ) }, activePosts() { @@ -381,9 +380,7 @@ export default { const { socialMedia = [] } = this.user return socialMedia.map(socialMedia => { const { url } = socialMedia - const matches = url.match( - /^(?:https?:\/\/)?(?:[^@\n])?(?:www\.)?([^:\/\n?]+)/g - ) + const matches = url.match(/^(?:https?:\/\/)?(?:[^@\n])?(?:www\.)?([^:/\n?]+)/g) const [domain] = matches || [] const favicon = domain ? `${domain}/favicon.ico` : null const username = url.split('/').pop() @@ -393,14 +390,14 @@ export default { userName() { const { name } = this.user || {} return name || this.$t('profile.userAnonym') - } + }, }, watch: { User(val) { if (!val || !val.length) { throw new Error('User not found!') } - } + }, }, methods: { uniq(items, field = 'id') { @@ -418,20 +415,20 @@ export default { variables: { slug: this.$route.params.slug, first: this.pageSize, - offset: this.offset + offset: this.offset, }, // Transform the previous result with new data updateQuery: (previousResult, { fetchMoreResult }) => { let output = { User: this.User } output.User[0].contributions = [ ...previousResult.User[0].contributions, - ...fetchMoreResult.User[0].contributions + ...fetchMoreResult.User[0].contributions, ] return output }, - fetchPolicy: 'cache-and-network' + fetchPolicy: 'cache-and-network', }) - } + }, }, apollo: { User: { @@ -442,12 +439,12 @@ export default { return { slug: this.$route.params.slug, first: this.pageSize, - offset: 0 + offset: 0, } }, - fetchPolicy: 'cache-and-network' - } - } + fetchPolicy: 'cache-and-network', + }, + }, } diff --git a/webapp/pages/settings.vue b/webapp/pages/settings.vue index 68b7c6d31..48eab45ff 100644 --- a/webapp/pages/settings.vue +++ b/webapp/pages/settings.vue @@ -29,16 +29,16 @@ export default { return [ { name: this.$t('settings.data.name'), - path: `/settings` + path: `/settings`, }, { name: this.$t('settings.security.name'), - path: `/settings/security` + path: `/settings/security`, }, { name: this.$t('settings.social-media.name'), - path: `/settings/my-social-media` - } + path: `/settings/my-social-media`, + }, // TODO implement /* { name: this.$t('settings.invites.name'), @@ -66,7 +66,7 @@ export default { }, } */ ] - } - } + }, + }, } diff --git a/webapp/pages/settings/data-download.vue b/webapp/pages/settings/data-download.vue index 4bb70de24..5c9e5a24a 100644 --- a/webapp/pages/settings/data-download.vue +++ b/webapp/pages/settings/data-download.vue @@ -12,7 +12,7 @@ import HcEmpty from '~/components/Empty.vue' export default { components: { - HcEmpty - } + HcEmpty, + }, } diff --git a/webapp/pages/settings/delete-account.vue b/webapp/pages/settings/delete-account.vue index 77e8b542b..5f488fed1 100644 --- a/webapp/pages/settings/delete-account.vue +++ b/webapp/pages/settings/delete-account.vue @@ -12,7 +12,7 @@ import HcEmpty from '~/components/Empty.vue' export default { components: { - HcEmpty - } + HcEmpty, + }, } diff --git a/webapp/pages/settings/index.spec.js b/webapp/pages/settings/index.spec.js index 8ee68172e..f0eff0641 100644 --- a/webapp/pages/settings/index.spec.js +++ b/webapp/pages/settings/index.spec.js @@ -1,6 +1,5 @@ import { mount, createLocalVue } from '@vue/test-utils' import index from './index.vue' -import Vue from 'vue' import Vuex from 'vuex' import Styleguide from '@human-connection/styleguide' @@ -10,7 +9,6 @@ localVue.use(Vuex) localVue.use(Styleguide) describe('index.vue', () => { - let Wrapper let store let mocks let getters @@ -28,27 +26,27 @@ describe('index.vue', () => { id: 'u1', name: 'Peter', locationName: 'Berlin', - about: 'Smth' - } - } - }) + about: 'Smth', + }, + }, + }), }, $toast: { error: jest.fn(), - success: jest.fn() - } + success: jest.fn(), + }, } getters = { 'auth/user': () => { return {} - } + }, } }) describe('mount', () => { const Wrapper = () => { store = new Vuex.Store({ - getters + getters, }) return mount(index, { store, mocks, localVue }) } diff --git a/webapp/pages/settings/index.vue b/webapp/pages/settings/index.vue index a3b2298c3..18e251bbc 100644 --- a/webapp/pages/settings/index.vue +++ b/webapp/pages/settings/index.vue @@ -51,11 +51,11 @@ import gql from 'graphql-tag' import { mapGetters, mapMutations } from 'vuex' import { CancelToken } from 'axios' -import find from 'lodash/find' let timeout const mapboxToken = process.env.MAPBOX_TOKEN +/* const query = gql` query getUser($id: ID) { User(id: $id) { @@ -66,15 +66,11 @@ const query = gql` } } ` +*/ const mutation = gql` mutation($id: ID!, $name: String, $locationName: String, $about: String) { - UpdateUser( - id: $id - name: $name - locationName: $locationName - about: $about - ) { + UpdateUser(id: $id, name: $name, locationName: $locationName, about: $about) { id name locationName @@ -90,12 +86,12 @@ export default { cities: [], loadingData: false, loadingGeo: false, - formData: {} + formData: {}, } }, computed: { ...mapGetters({ - currentUser: 'auth/user' + currentUser: 'auth/user', }), form: { get: function() { @@ -104,12 +100,12 @@ export default { }, set: function(formData) { this.formData = formData - } - } + }, + }, }, methods: { ...mapMutations({ - setCurrentUser: 'auth/SET_USER' + setCurrentUser: 'auth/SET_USER', }), async submit() { this.loadingData = true @@ -117,13 +113,13 @@ export default { let { locationName } = this.formData locationName = locationName && (locationName['label'] || locationName) try { - const { data } = await this.$apollo.mutate({ + await this.$apollo.mutate({ mutation, variables: { id: this.currentUser.id, name, locationName, - about + about, }, update: (store, { data: { UpdateUser } }) => { const { name, locationName, about } = UpdateUser @@ -131,9 +127,9 @@ export default { ...this.currentUser, name, locationName, - about + about, }) - } + }, }) this.$toast.success(this.$t('settings.data.success')) } catch (err) { @@ -147,12 +143,7 @@ export default { timeout = setTimeout(() => this.requestGeoData(value), 500) }, processCityResults(res) { - if ( - !res || - !res.data || - !res.data.features || - !res.data.features.length - ) { + if (!res || !res.data || !res.data.features || !res.data.features.length) { return [] } let output = [] @@ -160,7 +151,7 @@ export default { output.push({ label: item.place_name, value: item.place_name, - id: item.id + id: item.id, }) }) @@ -188,8 +179,8 @@ export default { .get( `https://api.mapbox.com/geocoding/v5/mapbox.places/${place}.json?access_token=${mapboxToken}&types=region,place,country&language=${lang}`, { - cancelToken: this.axiosSource.token - } + cancelToken: this.axiosSource.token, + }, ) .then(res => { this.cities = this.processCityResults(res) @@ -197,7 +188,7 @@ export default { .finally(() => { this.loadingGeo = false }) - } - } + }, + }, } diff --git a/webapp/pages/settings/invites.vue b/webapp/pages/settings/invites.vue index 7ef6f66fc..947d0b333 100644 --- a/webapp/pages/settings/invites.vue +++ b/webapp/pages/settings/invites.vue @@ -12,7 +12,7 @@ import HcEmpty from '~/components/Empty.vue' export default { components: { - HcEmpty - } + HcEmpty, + }, } diff --git a/webapp/pages/settings/languages.vue b/webapp/pages/settings/languages.vue index 52367f85b..7879d6425 100644 --- a/webapp/pages/settings/languages.vue +++ b/webapp/pages/settings/languages.vue @@ -12,7 +12,7 @@ import HcEmpty from '~/components/Empty.vue' export default { components: { - HcEmpty - } + HcEmpty, + }, } diff --git a/webapp/pages/settings/my-organizations.vue b/webapp/pages/settings/my-organizations.vue index 2b38f71aa..f651cbc61 100644 --- a/webapp/pages/settings/my-organizations.vue +++ b/webapp/pages/settings/my-organizations.vue @@ -12,7 +12,7 @@ import HcEmpty from '~/components/Empty.vue' export default { components: { - HcEmpty - } + HcEmpty, + }, } diff --git a/webapp/pages/settings/my-social-media.spec.js b/webapp/pages/settings/my-social-media.spec.js index 559ba87d2..34793e066 100644 --- a/webapp/pages/settings/my-social-media.spec.js +++ b/webapp/pages/settings/my-social-media.spec.js @@ -1,6 +1,5 @@ import { mount, createLocalVue } from '@vue/test-utils' import MySocialMedia from './my-social-media.vue' -import Vue from 'vue' import Vuex from 'vuex' import Styleguide from '@human-connection/styleguide' @@ -11,7 +10,6 @@ localVue.use(Styleguide) describe('my-social-media.vue', () => { let wrapper - let Wrapper let store let mocks let getters @@ -27,25 +25,25 @@ describe('my-social-media.vue', () => { .fn() .mockRejectedValue({ message: 'Ouch!' }) .mockResolvedValueOnce({ - data: { CreateSocialMeda: { id: 's1', url: socialMediaUrl } } - }) + data: { CreateSocialMeda: { id: 's1', url: socialMediaUrl } }, + }), }, $toast: { error: jest.fn(), - success: jest.fn() - } + success: jest.fn(), + }, } getters = { 'auth/user': () => { return {} - } + }, } }) describe('mount', () => { const Wrapper = () => { store = new Vuex.Store({ - getters + getters, }) return mount(MySocialMedia, { store, mocks, localVue }) } @@ -60,9 +58,9 @@ describe('my-social-media.vue', () => { getters = { 'auth/user': () => { return { - socialMedia: [{ id: 's1', url: socialMediaUrl }] + socialMedia: [{ id: 's1', url: socialMediaUrl }], } - } + }, } }) @@ -80,20 +78,20 @@ describe('my-social-media.vue', () => { .fn() .mockRejectedValue({ message: 'Ouch!' }) .mockResolvedValueOnce({ - data: { DeleteSocialMeda: { id: 's1', url: socialMediaUrl } } - }) + data: { DeleteSocialMeda: { id: 's1', url: socialMediaUrl } }, + }), }, $toast: { error: jest.fn(), - success: jest.fn() - } + success: jest.fn(), + }, } getters = { 'auth/user': () => { return { - socialMedia: [{ id: 's1', url: socialMediaUrl }] + socialMedia: [{ id: 's1', url: socialMediaUrl }], } - } + }, } }) diff --git a/webapp/pages/settings/my-social-media.vue b/webapp/pages/settings/my-social-media.vue index 95a61bdd8..745e2f776 100644 --- a/webapp/pages/settings/my-social-media.vue +++ b/webapp/pages/settings/my-social-media.vue @@ -22,7 +22,8 @@ /> {{ link.url }} -    |    +    + |    { const { id, url } = socialMedia - const matches = url.match( - /^(?:https?:\/\/)?(?:[^@\n])?(?:www\.)?([^:\/\n?]+)/g - ) + const matches = url.match(/^(?:https?:\/\/)?(?:[^@\n])?(?:www\.)?([^:/\n?]+)/g) const [domain] = matches || [] const favicon = domain ? `${domain}/favicon.ico` : null return { id, url, favicon } }) - } + }, }, methods: { ...mapMutations({ - setCurrentUser: 'auth/SET_USER' + setCurrentUser: 'auth/SET_USER', }), handleAddSocialMedia() { this.$apollo @@ -105,22 +104,19 @@ export default { } `, variables: { - url: this.value + url: this.value, }, update: (store, { data }) => { - const socialMedia = [ - ...this.currentUser.socialMedia, - data.CreateSocialMedia - ] + const socialMedia = [...this.currentUser.socialMedia, data.CreateSocialMedia] this.setCurrentUser({ ...this.currentUser, - socialMedia + socialMedia, }) - } + }, }) .then(() => { - this.$toast.success(this.$t('settings.social-media.successAdd')), - (this.value = '') + this.$toast.success(this.$t('settings.social-media.successAdd')) + this.value = '' }) .catch(error => { this.$toast.error(error.message) @@ -138,17 +134,17 @@ export default { } `, variables: { - id: link.id + id: link.id, }, update: (store, { data }) => { const socialMedia = this.currentUser.socialMedia.filter( - element => element.id !== link.id + element => element.id !== link.id, ) this.setCurrentUser({ ...this.currentUser, - socialMedia + socialMedia, }) - } + }, }) .then(() => { this.$toast.success(this.$t('settings.social-media.successDelete')) @@ -156,8 +152,8 @@ export default { .catch(error => { this.$toast.error(error.message) }) - } - } + }, + }, } diff --git a/webapp/pages/settings/security.vue b/webapp/pages/settings/security.vue index ac95ff26e..e1c8ca0e0 100644 --- a/webapp/pages/settings/security.vue +++ b/webapp/pages/settings/security.vue @@ -5,12 +5,11 @@ diff --git a/webapp/plugins/apollo-config.js b/webapp/plugins/apollo-config.js index f65700ab4..83ec452e3 100644 --- a/webapp/plugins/apollo-config.js +++ b/webapp/plugins/apollo-config.js @@ -3,11 +3,11 @@ export default ({ app }) => { return { httpEndpoint: process.server ? backendUrl : '/api', httpLinkOptions: { - credentials: 'same-origin' + credentials: 'same-origin', }, credentials: true, tokenName: 'human-connection-token', persisting: false, - websocketsOnly: false + websocketsOnly: false, } } diff --git a/webapp/plugins/i18n.js b/webapp/plugins/i18n.js index 836ba220f..b568ca39e 100644 --- a/webapp/plugins/i18n.js +++ b/webapp/plugins/i18n.js @@ -1,7 +1,6 @@ import Vue from 'vue' -import Vuex from 'vuex' import vuexI18n from 'vuex-i18n/dist/vuex-i18n.umd.js' -import { debounce, isEmpty, find } from 'lodash' +import { isEmpty, find } from 'lodash' /** * TODO: Refactor and simplify browser detection @@ -48,11 +47,9 @@ export default ({ app, req, cookie, store }) => { onTranslationNotFound: function(locale, key) { if (debug) { /* eslint-disable-next-line no-console */ - console.warn( - `vuex-i18n :: Key '${key}' not found for locale '${locale}'` - ) + console.warn(`vuex-i18n :: Key '${key}' not found for locale '${locale}'`) } - } + }, }) // register the fallback locales @@ -80,9 +77,7 @@ export default ({ app, req, cookie, store }) => { } const availableLocales = process.env.locales.filter(lang => !!lang.enabled) - const locale = find(availableLocales, ['code', userLocale]) - ? userLocale - : 'en' + const locale = find(availableLocales, ['code', userLocale]) ? userLocale : 'en' if (locale !== 'en') { Vue.i18n.add(locale, require(`~/locales/${locale}.json`)) diff --git a/webapp/plugins/izi-toast.js b/webapp/plugins/izi-toast.js index 5900898ac..8bb41c961 100644 --- a/webapp/plugins/izi-toast.js +++ b/webapp/plugins/izi-toast.js @@ -8,6 +8,6 @@ export default ({ app }) => { position: 'bottomRight', transitionIn: 'bounceInLeft', layout: 2, - theme: 'dark' + theme: 'dark', }) } diff --git a/webapp/plugins/keep-alive.js b/webapp/plugins/keep-alive.js index 93a8a1767..91d7ed1f0 100644 --- a/webapp/plugins/keep-alive.js +++ b/webapp/plugins/keep-alive.js @@ -24,7 +24,7 @@ if (!process.server) { if (this.$metaInfo && !keepAlivePages.includes(lastRoute)) { this.$destroy() } - } + }, }) } Vue.use(keepAliveHook) diff --git a/webapp/plugins/v-tooltip.js b/webapp/plugins/v-tooltip.js index a018ec5f3..77d0ac1b8 100644 --- a/webapp/plugins/v-tooltip.js +++ b/webapp/plugins/v-tooltip.js @@ -4,13 +4,13 @@ import VTooltip from 'v-tooltip' Vue.use(VTooltip, { defaultDelay: { show: 500, - hide: 50 + hide: 50, }, defaultOffset: 2, defaultPopperOptions: { - removeOnDestroy: true + removeOnDestroy: true, }, popover: { // defaultArrowClass: 'm-dropdown__arrow' - } + }, }) diff --git a/webapp/plugins/vue-directives.js b/webapp/plugins/vue-directives.js index 618bbd4e2..f54c02167 100644 --- a/webapp/plugins/vue-directives.js +++ b/webapp/plugins/vue-directives.js @@ -10,7 +10,7 @@ export default ({ app }) => { el.focus() } }) - } + }, }) Vue.directive('router-link', { @@ -28,6 +28,6 @@ export default ({ app }) => { if (binding.clickEventListener) { el.removeEventListener('click', binding.clickEventListener) } - } + }, }) } diff --git a/webapp/plugins/vue-filters.js b/webapp/plugins/vue-filters.js index bf59a7dba..aad978d72 100644 --- a/webapp/plugins/vue-filters.js +++ b/webapp/plugins/vue-filters.js @@ -2,7 +2,6 @@ import Vue from 'vue' import { enUS, de, nl, fr, es } from 'date-fns/locale' import format from 'date-fns/format' -import formatRelative from 'date-fns/formatRelative' import addSeconds from 'date-fns/addSeconds' import accounting from 'accounting' @@ -14,7 +13,7 @@ export default ({ app = {} }) => { fr: fr, es: es, pt: es, - pl: de + pl: de, } const getLocalizedFormat = () => { let locale = app.$i18n.locale() @@ -25,22 +24,16 @@ export default ({ app = {} }) => { date: (value, fmt = 'dd. MMM yyyy') => { if (!value) return '' return format(new Date(value), fmt, { - locale: getLocalizedFormat() + locale: getLocalizedFormat(), }) }, dateTime: (value, fmt = 'dd. MMM yyyy HH:mm') => { if (!value) return '' return format(new Date(value), fmt, { - locale: getLocalizedFormat() + locale: getLocalizedFormat(), }) }, - number: ( - value, - precision = 2, - thousands = '.', - decimals = ',', - fallback = null - ) => { + number: (value, precision = 2, thousands = '.', decimals = ',', fallback = null) => { if (isNaN(value) && fallback) { return fallback } @@ -99,7 +92,7 @@ export default ({ app = {} }) => { } return excerpt - } + }, }) // add all methods as filters on each vue component diff --git a/webapp/server/index.js b/webapp/server/index.js index 66738790e..d06bb1f6d 100644 --- a/webapp/server/index.js +++ b/webapp/server/index.js @@ -30,7 +30,7 @@ async function start() { app.listen(port, host) consola.ready({ message: `Server listening on http://${host}:${port}`, - badge: true + badge: true, }) } start() diff --git a/webapp/store/auth.js b/webapp/store/auth.js index ca1b453ba..87de84d9a 100644 --- a/webapp/store/auth.js +++ b/webapp/store/auth.js @@ -1,11 +1,10 @@ import gql from 'graphql-tag' -import jwt from 'jsonwebtoken' export const state = () => { return { user: null, token: null, - pending: false + pending: false, } } @@ -18,7 +17,7 @@ export const mutations = { }, SET_PENDING(state, pending) { state.pending = pending - } + }, } export const getters = { @@ -35,17 +34,14 @@ export const getters = { return !!state.user && state.user.role === 'admin' }, isModerator(state) { - return ( - !!state.user && - (state.user.role === 'admin' || state.user.role === 'moderator') - ) + return !!state.user && (state.user.role === 'admin' || state.user.role === 'moderator') }, user(state) { return state.user || {} }, token(state) { return state.token - } + }, } export const actions = { @@ -71,7 +67,7 @@ export const actions = { async fetchCurrentUser({ commit, dispatch }) { const client = this.app.apolloProvider.defaultClient const { - data: { currentUser } + data: { currentUser }, } = await client.query({ query: gql(`{ currentUser { @@ -105,7 +101,7 @@ export const actions = { } } } - }`) + }`), }) if (!currentUser) return dispatch('logout') commit('SET_USER', currentUser) @@ -117,14 +113,14 @@ export const actions = { try { const client = this.app.apolloProvider.defaultClient const { - data: { login } + data: { login }, } = await client.mutate({ mutation: gql(` mutation($email: String!, $password: String!) { login(email: $email, password: $password) } `), - variables: { email, password } + variables: { email, password }, }) await this.app.$apolloHelpers.onLogin(login) commit('SET_TOKEN', login) @@ -142,12 +138,9 @@ export const actions = { return this.app.$apolloHelpers.onLogout() }, - register( - { dispatch, commit }, - { email, password, inviteCode, invitedByUserId } - ) {}, + register({ dispatch, commit }, { email, password, inviteCode, invitedByUserId }) {}, async patch({ state, commit, dispatch }, data) {}, resendVerifySignup({ state, dispatch }) {}, resetPassword({ state }, data) {}, - setNewPassword({ state }, data) {} + setNewPassword({ state }, data) {}, } diff --git a/webapp/store/auth.test.js b/webapp/store/auth.test.js index 9b6a33195..e45fec693 100644 --- a/webapp/store/auth.test.js +++ b/webapp/store/auth.test.js @@ -1,4 +1,4 @@ -import { getters, mutations, actions } from './auth.js' +import { getters, actions } from './auth.js' let state let commit @@ -12,14 +12,15 @@ const currentUser = { slug: 'jenny-rostock', email: 'user@example.org', avatar: 'https://s3.amazonaws.com/uifaces/faces/twitter/mutu_krish/128.jpg', - role: 'user' + role: 'user', } const successfulLoginResponse = { data: { login: token } } const successfulCurrentUserResponse = { data: { currentUser } } +/* const incorrectPasswordResponse = { data: { - login: null + login: null, }, errors: [ { @@ -27,13 +28,14 @@ const incorrectPasswordResponse = { locations: [ { line: 2, - column: 3 - } + column: 3, + }, ], - path: ['login'] - } - ] + path: ['login'], + }, + ], } +*/ beforeEach(() => { commit = jest.fn() @@ -59,9 +61,9 @@ describe('actions', () => { const module = { app: { $apolloHelpers: { - getToken: () => token - } - } + getToken: () => token, + }, + }, } action = actions.init.bind(module) return action({ commit, dispatch }) @@ -91,9 +93,7 @@ describe('actions', () => { it('saves the JWT Bearer token', async () => { await theAction() - expect(commit.mock.calls).toEqual( - expect.arrayContaining([['SET_TOKEN', token]]) - ) + expect(commit.mock.calls).toEqual(expect.arrayContaining([['SET_TOKEN', token]])) }) }) }) @@ -105,12 +105,10 @@ describe('actions', () => { app: { apolloProvider: { defaultClient: { - query: jest.fn(() => - Promise.resolve(successfulCurrentUserResponse) - ) - } - } - } + query: jest.fn(() => Promise.resolve(successfulCurrentUserResponse)), + }, + }, + }, } action = actions.fetchCurrentUser.bind(module) await action({ commit }) @@ -126,12 +124,11 @@ describe('actions', () => { name: 'Jenny Rostock', slug: 'jenny-rostock', email: 'user@example.org', - avatar: - 'https://s3.amazonaws.com/uifaces/faces/twitter/mutu_krish/128.jpg', - role: 'user' - } - ] - ]) + avatar: 'https://s3.amazonaws.com/uifaces/faces/twitter/mutu_krish/128.jpg', + role: 'user', + }, + ], + ]), ) }) }) @@ -144,19 +141,16 @@ describe('actions', () => { app: { apolloProvider: { defaultClient: { - mutate: jest.fn(() => Promise.resolve(successfulLoginResponse)) - } + mutate: jest.fn(() => Promise.resolve(successfulLoginResponse)), + }, }, $apolloHelpers: { - onLogin: jest.fn(() => Promise.resolve()) - } - } + onLogin: jest.fn(() => Promise.resolve()), + }, + }, } action = actions.login.bind(module) - await action( - { commit, dispatch }, - { email: 'user@example.org', password: '1234' } - ) + await action({ commit, dispatch }, { email: 'user@example.org', password: '1234' }) }) afterEach(() => { @@ -164,9 +158,7 @@ describe('actions', () => { }) it('saves the JWT Bearer token', () => { - expect(commit.mock.calls).toEqual( - expect.arrayContaining([['SET_TOKEN', token]]) - ) + expect(commit.mock.calls).toEqual(expect.arrayContaining([['SET_TOKEN', token]])) }) it('fetches the user', () => { @@ -175,10 +167,7 @@ describe('actions', () => { it('saves pending flags in order', () => { expect(commit.mock.calls).toEqual( - expect.arrayContaining([ - ['SET_PENDING', true], - ['SET_PENDING', false] - ]) + expect.arrayContaining([['SET_PENDING', true], ['SET_PENDING', false]]), ) }) }) @@ -188,13 +177,13 @@ describe('actions', () => { let mutate beforeEach(() => { - mutate = jest.fn(() => Promise.reject('This error is expected.')) + mutate = jest.fn(() => Promise.reject('This error is expected.')) // eslint-disable-line prefer-promise-reject-errors onLogin = jest.fn(() => Promise.resolve()) const module = { app: { apolloProvider: { defaultClient: { mutate } }, - $apolloHelpers: { onLogin } - } + $apolloHelpers: { onLogin }, + }, } action = actions.login.bind(module) }) @@ -205,7 +194,7 @@ describe('actions', () => { it('populates error messages', async () => { expect( - action({ commit }, { email: 'user@example.org', password: 'wrong' }) + action({ commit }, { email: 'user@example.org', password: 'wrong' }), ).rejects.toThrowError('This error is expected.') expect(mutate).toHaveBeenCalled() expect(onLogin).not.toHaveBeenCalled() @@ -213,16 +202,10 @@ describe('actions', () => { it('saves pending flags in order', async () => { try { - await action( - { commit }, - { email: 'user@example.org', password: 'wrong' } - ) + await action({ commit }, { email: 'user@example.org', password: 'wrong' }) } catch (err) {} // ignore expect(commit.mock.calls).toEqual( - expect.arrayContaining([ - ['SET_PENDING', true], - ['SET_PENDING', false] - ]) + expect.arrayContaining([['SET_PENDING', true], ['SET_PENDING', false]]), ) }) }) diff --git a/webapp/store/index.js b/webapp/store/index.js index 91be021a5..8bc4ed563 100644 --- a/webapp/store/index.js +++ b/webapp/store/index.js @@ -5,5 +5,5 @@ export const mutations = {} export const actions = { async nuxtServerInit({ dispatch }) { await dispatch('auth/init') - } + }, } diff --git a/webapp/store/modal.js b/webapp/store/modal.js index f7bc1ad8e..72617f592 100644 --- a/webapp/store/modal.js +++ b/webapp/store/modal.js @@ -1,7 +1,7 @@ export const state = () => { return { open: null, - data: {} + data: {}, } } @@ -9,7 +9,7 @@ export const mutations = { SET_OPEN(state, ctx) { state.open = ctx.name || null state.data = ctx.data || {} - } + }, } export const getters = { @@ -18,5 +18,5 @@ export const getters = { }, data(state) { return state.data - } + }, } diff --git a/webapp/store/notifications.js b/webapp/store/notifications.js index cfb41e333..8e9b333b4 100644 --- a/webapp/store/notifications.js +++ b/webapp/store/notifications.js @@ -3,7 +3,7 @@ import gql from 'graphql-tag' export const state = () => { return { notifications: null, - pending: false + pending: false, } } @@ -19,13 +19,13 @@ export const mutations = { const toBeUpdated = notifications.find(n => { return n.id === notification.id }) - toBeUpdated = { ...toBeUpdated, ...notification } - } + state.notifications = { ...toBeUpdated, ...notification } + }, } export const getters = { notifications(state) { return !!state.notifications - } + }, } export const actions = { @@ -36,7 +36,7 @@ export const actions = { let notifications try { const { - data: { currentUser } + data: { currentUser }, } = await client.query({ query: gql(`{ currentUser { @@ -59,10 +59,9 @@ export const actions = { } } } - }`) + }`), }) notifications = currentUser.notifications - console.log(notifications) commit('SET_NOTIFICATIONS', notifications) } finally { commit('SET_PENDING', false) @@ -82,8 +81,8 @@ export const actions = { `) const variables = { id: notificationId, read: true } const { - data: { UpdateNotification } + data: { UpdateNotification }, } = await client.mutate({ mutation, variables }) commit('UPDATE_NOTIFICATIONS', UpdateNotification) - } + }, } diff --git a/webapp/store/search.js b/webapp/store/search.js index 0f9c00440..4aeb5030d 100644 --- a/webapp/store/search.js +++ b/webapp/store/search.js @@ -5,7 +5,7 @@ export const state = () => { return { quickResults: [], quickPending: false, - quickValue: '' + quickValue: '', } } @@ -19,7 +19,7 @@ export const mutations = { }, SET_QUICK_VALUE(state, value) { state.quickValue = value - } + }, } export const getters = { @@ -31,7 +31,7 @@ export const getters = { }, quickValue(state) { return state.quickValue - } + }, } export const actions = { @@ -64,8 +64,8 @@ export const actions = { } `), variables: { - filter: value.replace(/\s/g, '~ ') + '~' - } + filter: value.replace(/\s/g, '~ ') + '~', + }, }) .then(res => { commit('SET_QUICK_RESULTS', res.data.findPosts || []) @@ -82,5 +82,5 @@ export const actions = { commit('SET_QUICK_PENDING', false) commit('SET_QUICK_RESULTS', []) commit('SET_QUICK_VALUE', '') - } + }, } From ce3d16c146c161c20db9cfbb51b8ec3fbcabecb3 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 23 May 2019 20:02:56 +0200 Subject: [PATCH 066/253] fixed test error caused by manual lint error fixing --- webapp/components/Comment.spec.js | 1 + 1 file changed, 1 insertion(+) diff --git a/webapp/components/Comment.spec.js b/webapp/components/Comment.spec.js index 6b5339ec2..ebb9b8bf8 100644 --- a/webapp/components/Comment.spec.js +++ b/webapp/components/Comment.spec.js @@ -65,6 +65,7 @@ describe('Comment.vue', () => { }) it('translates a placeholder', () => { + /* const wrapper = */ Wrapper() const calls = mocks.$t.mock.calls const expected = [['comment.content.unavailable-placeholder']] expect(calls).toEqual(expect.arrayContaining(expected)) From 73dd7d879f39b402cce94d99474d00d7cfb176fa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Thu, 23 May 2019 18:24:57 +0000 Subject: [PATCH 067/253] Bump eslint-plugin-jest from 22.5.1 to 22.6.4 in /backend Bumps [eslint-plugin-jest](https://github.com/jest-community/eslint-plugin-jest) from 22.5.1 to 22.6.4. - [Release notes](https://github.com/jest-community/eslint-plugin-jest/releases) - [Changelog](https://github.com/jest-community/eslint-plugin-jest/blob/master/CHANGELOG.md) - [Commits](https://github.com/jest-community/eslint-plugin-jest/compare/v22.5.1...v22.6.4) Signed-off-by: dependabot[bot] --- backend/package.json | 2 +- backend/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/package.json b/backend/package.json index 18a73d452..e57e63c42 100644 --- a/backend/package.json +++ b/backend/package.json @@ -98,7 +98,7 @@ "eslint-config-standard": "~12.0.0", "eslint-config-prettier": "~4.3.0", "eslint-plugin-import": "~2.17.2", - "eslint-plugin-jest": "~22.5.1", + "eslint-plugin-jest": "~22.6.4", "eslint-plugin-node": "~9.0.1", "eslint-plugin-prettier": "~3.1.0", "eslint-plugin-promise": "~4.1.1", diff --git a/backend/yarn.lock b/backend/yarn.lock index 05393a9fe..7440f2bd2 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -3044,10 +3044,10 @@ eslint-plugin-import@~2.17.2: read-pkg-up "^2.0.0" resolve "^1.10.0" -eslint-plugin-jest@~22.5.1: - version "22.5.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.5.1.tgz#a31dfe9f9513c6af7c17ece4c65535a1370f060b" - integrity sha512-c3WjZR/HBoi4GedJRwo2OGHa8Pzo1EbSVwQ2HFzJ+4t2OoYM7Alx646EH/aaxZ+9eGcPiq0FT0UGkRuFFx2FHg== +eslint-plugin-jest@~22.6.4: + version "22.6.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.6.4.tgz#2895b047dd82f90f43a58a25cf136220a21c9104" + integrity sha512-36OqnZR/uMCDxXGmTsqU4RwllR0IiB/XF8GW3ODmhsjiITKuI0GpgultWFt193ipN3HARkaIcKowpE6HBvRHNg== eslint-plugin-node@~9.0.1: version "9.0.1" From 1c1d1a67ea87b3b5c06803d6bd673d9c84b8cbe0 Mon Sep 17 00:00:00 2001 From: Matt Rider Date: Thu, 23 May 2019 15:31:05 -0300 Subject: [PATCH 068/253] Merge in master --- backend/src/graphql-schema.js | 4 +-- .../notifications/extractIds/index.js | 2 +- backend/src/resolvers/fileUpload/index.js | 4 +-- backend/src/resolvers/fileUpload/spec.js | 27 ++++++++++++------- backend/src/resolvers/users.js | 4 +-- backend/src/resolvers/users.spec.js | 2 +- 6 files changed, 26 insertions(+), 17 deletions(-) diff --git a/backend/src/graphql-schema.js b/backend/src/graphql-schema.js index afceec029..a846541e7 100644 --- a/backend/src/graphql-schema.js +++ b/backend/src/graphql-schema.js @@ -36,6 +36,6 @@ export const resolvers = { ...socialMedia.Mutation, ...notifications.Mutation, ...comments.Mutation, - ...users.Mutation - } + ...users.Mutation, + }, } diff --git a/backend/src/middleware/notifications/extractIds/index.js b/backend/src/middleware/notifications/extractIds/index.js index f642484b8..c2fcf169c 100644 --- a/backend/src/middleware/notifications/extractIds/index.js +++ b/backend/src/middleware/notifications/extractIds/index.js @@ -1,7 +1,7 @@ import cheerio from 'cheerio' const ID_REGEX = /\/profile\/([\w\-.!~*'"(),]+)/g -export default function (content) { +export default function(content) { if (!content) return [] const $ = cheerio.load(content) const urls = $('.mention') diff --git a/backend/src/resolvers/fileUpload/index.js b/backend/src/resolvers/fileUpload/index.js index 85bdf920b..c37d87e39 100644 --- a/backend/src/resolvers/fileUpload/index.js +++ b/backend/src/resolvers/fileUpload/index.js @@ -7,10 +7,10 @@ const storeUpload = ({ createReadStream, fileLocation }) => createReadStream() .pipe(createWriteStream(`public${fileLocation}`)) .on('finish', resolve) - .on('error', reject) + .on('error', reject), ) -export default async function fileUpload (params, { file, url }, uploadCallback = storeUpload) { +export default async function fileUpload(params, { file, url }, uploadCallback = storeUpload) { const upload = params[file] if (upload) { diff --git a/backend/src/resolvers/fileUpload/spec.js b/backend/src/resolvers/fileUpload/spec.js index 798e4f9c5..5767d6457 100644 --- a/backend/src/resolvers/fileUpload/spec.js +++ b/backend/src/resolvers/fileUpload/spec.js @@ -10,8 +10,8 @@ describe('fileUpload', () => { filename: 'avatar.jpg', mimetype: 'image/jpeg', encoding: '7bit', - createReadStream: jest.fn() - } + createReadStream: jest.fn(), + }, } uploadCallback = jest.fn() }) @@ -34,21 +34,30 @@ describe('fileUpload', () => { }) it('creates a url safe name', async () => { - params.uploadAttribute.filename = '/path/to/awkward?/ file-location/?foo- bar-avatar.jpg?foo- bar' + params.uploadAttribute.filename = + '/path/to/awkward?/ file-location/?foo- bar-avatar.jpg?foo- bar' await fileUpload(params, { file: 'uploadAttribute', url: 'attribute' }, uploadCallback) expect(params.attribute).toMatch(/^\/uploads\/\d+-foo-bar-avatar$/) }) describe('in case of duplicates', () => { it('creates unique names to avoid overwriting existing files', async () => { - const { attribute: first } = await fileUpload({ - ...params - }, { file: 'uploadAttribute', url: 'attribute' }, uploadCallback) + const { attribute: first } = await fileUpload( + { + ...params, + }, + { file: 'uploadAttribute', url: 'attribute' }, + uploadCallback, + ) await new Promise(resolve => setTimeout(resolve, 1000)) - const { attribute: second } = await fileUpload({ - ...params - }, { file: 'uploadAttribute', url: 'attribute' }, uploadCallback) + const { attribute: second } = await fileUpload( + { + ...params, + }, + { file: 'uploadAttribute', url: 'attribute' }, + uploadCallback, + ) expect(first).not.toEqual(second) }) }) diff --git a/backend/src/resolvers/users.js b/backend/src/resolvers/users.js index 01beae522..53bf0967e 100644 --- a/backend/src/resolvers/users.js +++ b/backend/src/resolvers/users.js @@ -10,6 +10,6 @@ export default { CreateUser: async (object, params, context, resolveInfo) => { params = await fileUpload(params, { file: 'avatarUpload', url: 'avatar' }) return neo4jgraphql(object, params, context, resolveInfo, false) - } - } + }, + }, } diff --git a/backend/src/resolvers/users.spec.js b/backend/src/resolvers/users.spec.js index e81b555c5..22096b6c8 100644 --- a/backend/src/resolvers/users.spec.js +++ b/backend/src/resolvers/users.spec.js @@ -67,7 +67,7 @@ describe('users', () => { it('with no name', async () => { const variables = { id: 'u47', - name: null + name: null, } const expected = 'Username must be at least 3 characters long!' await expect(client.request(mutation, variables)).rejects.toThrow(expected) From d62f722381b0e0e2bbdc84addc28d5b88cc69b34 Mon Sep 17 00:00:00 2001 From: Matt Rider Date: Thu, 23 May 2019 23:30:55 -0300 Subject: [PATCH 069/253] Write component tests --- webapp/components/Upload/index.vue | 22 ++++-------- webapp/components/Upload/spec.js | 55 +++++++++++++++++++++++++----- 2 files changed, 54 insertions(+), 23 deletions(-) diff --git a/webapp/components/Upload/index.vue b/webapp/components/Upload/index.vue index 783b91b91..74222b14b 100644 --- a/webapp/components/Upload/index.vue +++ b/webapp/components/Upload/index.vue @@ -53,16 +53,14 @@ export default {
-
-
` }, thumbnail(file, dataUrl) { - var j, len, ref, thumbnailElement - this.$refs.el.dropzone.element.style['background-image'] = '' + let j, len, ref, thumbnailElement if (file.previewElement) { + this.$refs.el.$el.style.backgroundImage = '' file.previewElement.classList.remove('dz-file-preview') ref = file.previewElement.querySelectorAll('[data-dz-thumbnail-bg]') for (j = 0, len = ref.length; j < len; j++) { @@ -70,17 +68,11 @@ export default { thumbnailElement.alt = file.name thumbnailElement.style.backgroundImage = 'url("' + dataUrl + '")' } - return setTimeout( - (function(_this) { - return function() { - return file.previewElement.classList.add('dz-image-preview') - } - })(this), - 1 - ) + file.previewElement.classList.add('dz-image-preview') } }, - vddrop([file]) { + vddrop(file) { + const avatarUpload = file[0] this.$apollo .mutate({ mutation: gql` @@ -92,11 +84,11 @@ export default { } `, variables: { - avatarUpload: file, + avatarUpload, id: this.user.id } }) - .then(response => { + .then(() => { this.$toast.success(this.$t('user.avatar.submitted')) }) .catch(error => this.$toast.error(error.message)) diff --git a/webapp/components/Upload/spec.js b/webapp/components/Upload/spec.js index 71c35d962..22eaa9b6c 100644 --- a/webapp/components/Upload/spec.js +++ b/webapp/components/Upload/spec.js @@ -4,26 +4,65 @@ import Vuex from 'vuex' import Styleguide from '@human-connection/styleguide' const localVue = createLocalVue() + localVue.use(Vuex) localVue.use(Styleguide) describe('Upload', () => { let wrapper - let propsData - propsData = { - user: { - avatar: '/api/avatar.jpg' + const mocks = { + $apollo: { + mutate: jest.fn().mockResolvedValueOnce({ + data: { UpdateUser: { id: 'upload1', avatar: '/upload/avatar.jpg' } } + }) + .mockRejectedValue({ message: 'File upload unsuccessful! Whatcha gonna do?' }) + }, + $toast: { + success: jest.fn(), + error: jest.fn() } } + const propsData = { + user: { + avatar: '/api/generic.jpg' + } + } + + const file = { + filename: 'avatar.jpg', + previewElement: { + classList: { + remove: jest.fn(), + add: jest.fn() + }, + querySelectorAll: jest.fn().mockReturnValue( + [ + { + alt: '', + style: { + 'background-image': '/api/generic.jpg' + } + } + ]) + } + } + + const dataUrl = 'avatar.jpg' + beforeEach(() => { - wrapper = shallowMount(Upload, { localVue, propsData }) + jest.useFakeTimers() + wrapper = shallowMount(Upload, { localVue, propsData, mocks }) }) - it('renders', () => { - expect(wrapper.is('div')).toBe(true) + it('sends a the UpdateUser mutation when vddrop is called', () => { + wrapper.vm.vddrop([{ filename: 'avatar.jpg' }]) + expect(mocks.$apollo.mutate).toHaveBeenCalledTimes(1) }) - // TODO: add more test cases in this file + it('thumbnail', () => { + wrapper.vm.thumbnail(file, dataUrl) + expect(file.previewElement.classList.add).toHaveBeenCalledTimes(1) + }) }) From 38346ee21df39189e6ec28620365c946dc1423f3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Fri, 24 May 2019 03:04:25 +0000 Subject: [PATCH 070/253] Bump @babel/preset-env from 7.4.4 to 7.4.5 in /backend Bumps [@babel/preset-env](https://github.com/babel/babel) from 7.4.4 to 7.4.5. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md) - [Commits](https://github.com/babel/babel/compare/v7.4.4...v7.4.5) Signed-off-by: dependabot[bot] --- backend/package.json | 2 +- backend/yarn.lock | 131 +++++++++++++++++++++---------------------- 2 files changed, 64 insertions(+), 69 deletions(-) diff --git a/backend/package.json b/backend/package.json index d4ce2b3e4..bfd35ee20 100644 --- a/backend/package.json +++ b/backend/package.json @@ -86,7 +86,7 @@ "@babel/core": "~7.4.5", "@babel/node": "~7.2.2", "@babel/plugin-proposal-throw-expressions": "^7.2.0", - "@babel/preset-env": "~7.4.4", + "@babel/preset-env": "~7.4.5", "@babel/register": "~7.4.4", "apollo-server-testing": "~2.5.0", "babel-core": "~7.0.0-0", diff --git a/backend/yarn.lock b/backend/yarn.lock index d5580ee56..03baac615 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -524,12 +524,12 @@ "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-named-capturing-groups-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.4.tgz#5611d96d987dfc4a3a81c4383bb173361037d68d" - integrity sha512-Ki+Y9nXBlKfhD+LXaRS7v95TtTGYRAf9Y1rTDiE75zf8YQz4GDaWRXosMfJBXxnk88mGFjWdCRIeqDbon7spYA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz#9d269fd28a370258199b4294736813a60bbdd106" + integrity sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg== dependencies: - regexp-tree "^0.1.0" + regexp-tree "^0.1.6" "@babel/plugin-transform-new-target@^7.4.4": version "7.4.4" @@ -562,12 +562,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-regenerator@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.4.tgz#5b4da4df79391895fca9e28f99e87e22cfc02072" - integrity sha512-Zz3w+pX1SI0KMIiqshFZkwnVGUhDZzpX2vtPzfJBKQQq8WsP/Xy9DNdELWivxcKOCX/Pywge4SiEaPaLtoDT4g== +"@babel/plugin-transform-regenerator@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" + integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== dependencies: - regenerator-transform "^0.13.4" + regenerator-transform "^0.14.0" "@babel/plugin-transform-reserved-words@^7.2.0": version "7.2.0" @@ -638,10 +638,10 @@ core-js "^2.5.7" regenerator-runtime "^0.12.0" -"@babel/preset-env@~7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.4.4.tgz#b6f6825bfb27b3e1394ca3de4f926482722c1d6f" - integrity sha512-FU1H+ACWqZZqfw1x2G1tgtSSYSfxJLkpaUQL37CenULFARDo+h4xJoVHzRoHbK+85ViLciuI7ME4WTIhFRBBlw== +"@babel/preset-env@~7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.4.5.tgz#2fad7f62983d5af563b5f3139242755884998a58" + integrity sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -672,12 +672,12 @@ "@babel/plugin-transform-modules-commonjs" "^7.4.4" "@babel/plugin-transform-modules-systemjs" "^7.4.4" "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5" "@babel/plugin-transform-new-target" "^7.4.4" "@babel/plugin-transform-object-super" "^7.2.0" "@babel/plugin-transform-parameters" "^7.4.4" "@babel/plugin-transform-property-literals" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.4.4" + "@babel/plugin-transform-regenerator" "^7.4.5" "@babel/plugin-transform-reserved-words" "^7.2.0" "@babel/plugin-transform-shorthand-properties" "^7.2.0" "@babel/plugin-transform-spread" "^7.2.0" @@ -686,8 +686,8 @@ "@babel/plugin-transform-typeof-symbol" "^7.2.0" "@babel/plugin-transform-unicode-regex" "^7.4.4" "@babel/types" "^7.4.4" - browserslist "^4.5.2" - core-js-compat "^3.0.0" + browserslist "^4.6.0" + core-js-compat "^3.1.1" invariant "^2.2.2" js-levenshtein "^1.1.3" semver "^5.5.0" @@ -2036,14 +2036,14 @@ browser-resolve@^1.11.3: dependencies: resolve "1.1.7" -browserslist@^4.5.1, browserslist@^4.5.2: - version "4.5.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.5.4.tgz#166c4ecef3b51737a42436ea8002aeea466ea2c7" - integrity sha512-rAjx494LMjqKnMPhFkuLmLp8JWEX0o8ADTGeAbOqaF+XCvYLreZrG5uVjnPBlAQ8REZK4pzXGvp0bWgrFtKaag== +browserslist@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.0.tgz#5274028c26f4d933d5b1323307c1d1da5084c9ff" + integrity sha512-Jk0YFwXBuMOOol8n6FhgkDzn3mY9PYLYGk29zybF05SbRTsMgPqmTNeQQhOghCxq5oFqAXE3u4sYddr4C0uRhg== dependencies: - caniuse-lite "^1.0.30000955" - electron-to-chromium "^1.3.122" - node-releases "^1.1.13" + caniuse-lite "^1.0.30000967" + electron-to-chromium "^1.3.133" + node-releases "^1.1.19" bs58@=2.0.0: version "2.0.0" @@ -2134,10 +2134,10 @@ camelize@1.0.0: resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= -caniuse-lite@^1.0.30000955: - version "1.0.30000956" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000956.tgz#fe56d8727fab96e0304ffbde6c4e538c9ad2a741" - integrity sha512-3o7L6XkQ01Oney+x2fS5UVbQXJ7QQkYxrSfaLmFlgQabcKfploI8bhS2nmQ8Unh5MpMONAMeDEdEXG9t9AK6uA== +caniuse-lite@^1.0.30000967: + version "1.0.30000971" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000971.tgz#d1000e4546486a6977756547352bc96a4cfd2b13" + integrity sha512-TQFYFhRS0O5rdsmSbF1Wn+16latXYsQJat66f7S7lizXW1PVpWJeZw9wqqVLIjuxDRz7s7xRUj13QCfd8hKn6g== capture-exit@^1.2.0: version "1.2.0" @@ -2254,7 +2254,7 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" -cli-table3@^0.5.0, cli-table3@^0.5.1: +cli-table3@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== @@ -2418,25 +2418,19 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.0.0.tgz#cd9810b8000742535a4a43773866185e310bd4f7" - integrity sha512-W/Ppz34uUme3LmXWjMgFlYyGnbo1hd9JvA0LNQ4EmieqVjg2GPYbj3H6tcdP2QGPGWdRKUqZVbVKLNIFVs/HiA== +core-js-compat@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.1.2.tgz#c29ab9722517094b98622175e2218c3b7398176d" + integrity sha512-X0Ch5f6itrHxhg5HSJucX6nNLNAGr+jq+biBh6nPGc3YAWz2a8p/ZIZY8cUkDzSRNG54omAuu3hoEF8qZbu/6Q== dependencies: - browserslist "^4.5.1" - core-js "3.0.0" - core-js-pure "3.0.0" - semver "^5.6.0" + browserslist "^4.6.0" + core-js-pure "3.1.2" + semver "^6.0.0" -core-js-pure@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.0.0.tgz#a5679adb4875427c8c0488afc93e6f5b7125859b" - integrity sha512-yPiS3fQd842RZDgo/TAKGgS0f3p2nxssF1H65DIZvZv0Od5CygP8puHXn3IQiM/39VAvgCbdaMQpresrbGgt9g== - -core-js@3.0.0, core-js@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.0.0.tgz#a8dbfa978d29bfc263bfb66c556d0ca924c28957" - integrity sha512-WBmxlgH2122EzEJ6GH8o9L/FeoUKxxxZ6q6VUxoTlsE4EvbTWKJb447eyVxTEuq0LpXjlq/kCB2qgBvsYRkLvQ== +core-js-pure@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.1.2.tgz#62fc435f35b7374b9b782013cdcb2f97e9f6dffa" + integrity sha512-5ckIdBF26B3ldK9PM177y2ZcATP2oweam9RskHSoqfZCrJ2As6wVg8zJ1zTriFsZf6clj/N1ThDFRGaomMsh9w== core-js@3.0.0-beta.13: version "3.0.0-beta.13" @@ -2448,6 +2442,11 @@ core-js@^2.4.0, core-js@^2.5.3, core-js@^2.5.7: resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.2.tgz#267988d7268323b349e20b4588211655f0e83944" integrity sha512-NdBPF/RVwPW6jr0NCILuyN9RiqLo2b1mddWHkUL+VnvcB7dzlnBJ1bXYntjpTGOgkZiiLWj2JxmOr7eGE3qK6g== +core-js@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.0.0.tgz#a8dbfa978d29bfc263bfb66c556d0ca924c28957" + integrity sha512-WBmxlgH2122EzEJ6GH8o9L/FeoUKxxxZ6q6VUxoTlsE4EvbTWKJb447eyVxTEuq0LpXjlq/kCB2qgBvsYRkLvQ== + core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -2869,10 +2868,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.122: - version "1.3.122" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.122.tgz#b32a0805f48557bd3c3b8104eadc7fa511b14a9a" - integrity sha512-3RKoIyCN4DhP2dsmleuFvpJAIDOseWH88wFYBzb22CSwoFDSWRc4UAMfrtc9h8nBdJjTNIN3rogChgOy6eFInw== +electron-to-chromium@^1.3.133: + version "1.3.137" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.137.tgz#ba7c88024984c038a5c5c434529aabcea7b42944" + integrity sha512-kGi32g42a8vS/WnYE7ELJyejRT7hbr3UeOOu0WeuYuQ29gCpg9Lrf6RdcTQVXSt/v0bjCfnlb/EWOOsiKpTmkw== elliptic@=3.0.3: version "3.0.3" @@ -5690,10 +5689,10 @@ node-pre-gyp@^0.10.0: semver "^5.3.0" tar "^4" -node-releases@^1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.13.tgz#8c03296b5ae60c08e2ff4f8f22ae45bd2f210083" - integrity sha512-fKZGviSXR6YvVPyc011NHuJDSD8gFQvLPmc2d2V3BS4gr52ycyQ1Xzs7a8B+Ax3Ni/W+5h1h4SqmzeoA8WZRmA== +node-releases@^1.1.19: + version "1.1.21" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.21.tgz#46c86f9adaceae4d63c75d3c2f2e6eee618e55f3" + integrity sha512-TwnURTCjc8a+ElJUjmDqU6+12jhli1Q61xOQmdZ7ECZVBZuQpN/1UnembiIHDM1wCcfLvh5wrWXUF5H6ufX64Q== dependencies: semver "^5.3.0" @@ -6546,10 +6545,10 @@ regenerator-runtime@^0.13.2: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== -regenerator-transform@^0.13.4: - version "0.13.4" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.4.tgz#18f6763cf1382c69c36df76c6ce122cc694284fb" - integrity sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A== +regenerator-transform@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.0.tgz#2ca9aaf7a2c239dd32e4761218425b8c7a86ecaf" + integrity sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w== dependencies: private "^0.1.6" @@ -6561,14 +6560,10 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp-tree@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.1.tgz#27b455f9b138ca2e84c090e9aff1ffe2a04d97fa" - integrity sha512-HwRjOquc9QOwKTgbxvZTcddS5mlNlwePMQ3NFL8broajMLD5CXDAqas8Y5yxJH5QtZp5iRor3YCILd5pz71Cgw== - dependencies: - cli-table3 "^0.5.0" - colors "^1.1.2" - yargs "^12.0.5" +regexp-tree@^0.1.6: + version "0.1.10" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.10.tgz#d837816a039c7af8a8d64d7a7c3cf6a1d93450bc" + integrity sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ== regexpp@^2.0.1: version "2.0.1" @@ -8097,7 +8092,7 @@ yargs-parser@^11.1.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@^12.0.2, yargs@^12.0.5: +yargs@^12.0.2: version "12.0.5" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== From 362425490040879eaa22543b3653213c231638e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Fri, 24 May 2019 03:04:26 +0000 Subject: [PATCH 071/253] Bump @babel/node from 7.2.2 to 7.4.5 in /backend Bumps [@babel/node](https://github.com/babel/babel) from 7.2.2 to 7.4.5. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md) - [Commits](https://github.com/babel/babel/compare/v7.2.2...v7.4.5) Signed-off-by: dependabot[bot] --- backend/package.json | 2 +- backend/yarn.lock | 36 +++++++++++++++++++++--------------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/backend/package.json b/backend/package.json index d4ce2b3e4..f812faed6 100644 --- a/backend/package.json +++ b/backend/package.json @@ -84,7 +84,7 @@ "devDependencies": { "@babel/cli": "~7.4.4", "@babel/core": "~7.4.5", - "@babel/node": "~7.2.2", + "@babel/node": "~7.4.5", "@babel/plugin-proposal-throw-expressions": "^7.2.0", "@babel/preset-env": "~7.4.4", "@babel/register": "~7.4.4", diff --git a/backend/yarn.lock b/backend/yarn.lock index d5580ee56..f2b177ce1 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -278,15 +278,16 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/node@~7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.2.2.tgz#1557dd23545b38d7b1d030a9c0e8fb225dbf70ab" - integrity sha512-jPqgTycE26uFsuWpLika9Ohz9dmLQHWjOnMNxBOjYb1HXO+eLKxEr5FfKSXH/tBvFwwaw+pzke3gagnurGOfCA== +"@babel/node@~7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.4.5.tgz#bce71bb44d902bfdd4da0b9c839a8a90fc084056" + integrity sha512-nDXPT0KwYMycDHhFG9wKlkipCR+iXzzoX9bD2aF2UABLhQ13AKhNi5Y61W8ASGPPll/7p9GrHesmlOgTUJVcfw== dependencies: "@babel/polyfill" "^7.0.0" "@babel/register" "^7.0.0" commander "^2.8.1" - lodash "^4.17.10" + lodash "^4.17.11" + node-environment-flags "^1.0.5" v8flags "^3.1.1" "@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.4", "@babel/parser@^7.4.5": @@ -622,15 +623,7 @@ "@babel/helper-regex" "^7.4.4" regexpu-core "^4.5.4" -"@babel/polyfill@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.0.0.tgz#c8ff65c9ec3be6a1ba10113ebd40e8750fb90bff" - integrity sha512-dnrMRkyyr74CRelJwvgnnSUDh2ge2NCTyHVwpOdvRMHtJUyxLtMAfhBN3s64pY41zdw0kgiLPh6S20eb1NcX6Q== - dependencies: - core-js "^2.5.7" - regenerator-runtime "^0.11.1" - -"@babel/polyfill@^7.2.3": +"@babel/polyfill@^7.0.0", "@babel/polyfill@^7.2.3": version "7.2.5" resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.2.5.tgz#6c54b964f71ad27edddc567d065e57e87ed7fa7d" integrity sha512-8Y/t3MWThtMLYr0YNC/Q76tqN1w30+b0uQMeFUYauG2UGTR19zyUtFrAzT23zNtBxPp+LbE5E/nwV/q/r3y6ug== @@ -5639,6 +5632,14 @@ nocache@2.1.0: resolved "https://registry.yarnpkg.com/nocache/-/nocache-2.1.0.tgz#120c9ffec43b5729b1d5de88cd71aa75a0ba491f" integrity sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q== +node-environment-flags@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" + integrity sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ== + dependencies: + object.getownpropertydescriptors "^2.0.3" + semver "^5.7.0" + node-fetch@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5" @@ -6531,7 +6532,7 @@ regenerate@^1.4.0: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== -regenerator-runtime@^0.11.0, regenerator-runtime@^0.11.1: +regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== @@ -6857,6 +6858,11 @@ semver-diff@^2.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== +semver@^5.7.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + semver@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.0.0.tgz#05e359ee571e5ad7ed641a6eec1e547ba52dea65" From d842493d91dca757b374b4fd5fde1825e9ca4c30 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Fri, 24 May 2019 03:04:34 +0000 Subject: [PATCH 072/253] Bump apollo-client from 2.5.1 to 2.6.0 in /webapp Bumps [apollo-client](https://github.com/apollographql/apollo-client) from 2.5.1 to 2.6.0. - [Release notes](https://github.com/apollographql/apollo-client/releases) - [Changelog](https://github.com/apollographql/apollo-client/blob/master/CHANGELOG.md) - [Commits](https://github.com/apollographql/apollo-client/compare/apollo-client@2.5.1...apollo-client@2.6.0) Signed-off-by: dependabot[bot] --- webapp/package.json | 2 +- webapp/yarn.lock | 50 ++++++++++++++++++++++----------------------- 2 files changed, 25 insertions(+), 27 deletions(-) diff --git a/webapp/package.json b/webapp/package.json index 616a8a5f0..4dfcb37f8 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -58,7 +58,7 @@ "@nuxtjs/style-resources": "~0.1.2", "accounting": "~0.4.1", "apollo-cache-inmemory": "~1.5.1", - "apollo-client": "~2.5.1", + "apollo-client": "~2.6.0", "cookie-universal-nuxt": "~2.0.14", "cross-env": "~5.2.0", "date-fns": "2.0.0-alpha.27", diff --git a/webapp/yarn.lock b/webapp/yarn.lock index 4e6ad32e7..5b576f707 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -1852,26 +1852,25 @@ apollo-cache-inmemory@^1.5.1, apollo-cache-inmemory@~1.5.1: ts-invariant "^0.2.1" tslib "^1.9.3" -apollo-cache@1.2.1, apollo-cache@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/apollo-cache/-/apollo-cache-1.2.1.tgz#aae71eb4a11f1f7322adc343f84b1a39b0693644" - integrity sha512-nzFmep/oKlbzUuDyz6fS6aYhRmfpcHWqNkkA9Bbxwk18RD6LXC4eZkuE0gXRX0IibVBHNjYVK+Szi0Yied4SpQ== +apollo-cache@1.3.0, apollo-cache@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/apollo-cache/-/apollo-cache-1.3.0.tgz#de5c907cbd329440c9b0aafcbe8436391b9e6142" + integrity sha512-voPlvSIDA2pY3+7QwtXPs7o5uSNAVjUKwimyHWoiW0MIZtPxawtOV/Y+BL85R227JqcjPic1El+QToVR8l4ytQ== dependencies: - apollo-utilities "^1.2.1" + apollo-utilities "^1.3.0" tslib "^1.9.3" -apollo-client@^2.5.1, apollo-client@~2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/apollo-client/-/apollo-client-2.5.1.tgz#36126ed1d32edd79c3713c6684546a3bea80e6d1" - integrity sha512-MNcQKiqLHdGmNJ0rZ0NXaHrToXapJgS/5kPk0FygXt+/FmDCdzqcujI7OPxEC6e9Yw5S/8dIvOXcRNuOMElHkA== +apollo-client@^2.5.1, apollo-client@~2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/apollo-client/-/apollo-client-2.6.0.tgz#9b66c04cd96d622cd72f92e584e7403c17532831" + integrity sha512-Z6oSD45vyw6maktMABXTaJliWdFJy4ihZGxbRh7rY65RWNz0HSm3IX66shLavdNqd4lpOcVuAufJl+w8u6RhLQ== dependencies: "@types/zen-observable" "^0.8.0" - apollo-cache "1.2.1" + apollo-cache "1.3.0" apollo-link "^1.0.0" - apollo-link-dedup "^1.0.0" - apollo-utilities "1.2.1" + apollo-utilities "1.3.0" symbol-observable "^1.0.2" - ts-invariant "^0.2.1" + ts-invariant "^0.4.0" tslib "^1.9.3" zen-observable "^0.8.0" @@ -1927,14 +1926,6 @@ apollo-link-context@^1.0.17: apollo-link "^1.2.11" tslib "^1.9.3" -apollo-link-dedup@^1.0.0: - version "1.0.18" - resolved "https://registry.yarnpkg.com/apollo-link-dedup/-/apollo-link-dedup-1.0.18.tgz#635cb5659b082e7f270f7649c4b0f71021f7bb4b" - integrity sha512-1rr54wyMTuqUmbWvcXbwduIcaCDcuIgU6MqQ599nAMuTrbSOXthGfoAD8BDTxBGQ9roVlM7ABP0VZVEWRoHWSg== - dependencies: - apollo-link "^1.2.11" - tslib "^1.9.3" - apollo-link-http-common@^0.2.13: version "0.2.13" resolved "https://registry.yarnpkg.com/apollo-link-http-common/-/apollo-link-http-common-0.2.13.tgz#c688f6baaffdc7b269b2db7ae89dae7c58b5b350" @@ -2064,13 +2055,13 @@ apollo-upload-client@^10.0.0: apollo-link-http-common "^0.2.13" extract-files "^5.0.1" -apollo-utilities@1.2.1, apollo-utilities@^1.0.1, apollo-utilities@^1.0.8, apollo-utilities@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.2.1.tgz#1c3a1ebf5607d7c8efe7636daaf58e7463b41b3c" - integrity sha512-Zv8Udp9XTSFiN8oyXOjf6PMHepD4yxxReLsl6dPUy5Ths7jti3nmlBzZUOxuTWRwZn0MoclqL7RQ5UEJN8MAxg== +apollo-utilities@1.3.0, apollo-utilities@^1.0.1, apollo-utilities@^1.0.8, apollo-utilities@^1.2.1, apollo-utilities@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.3.0.tgz#9803724c07ac94ca11dc26397edb58735d2b0211" + integrity sha512-wQjV+FdWcTWmWUFlChG5rS0vHKy5OsXC6XlV9STRstQq6VbXANwHy6DHnTEQAfLXWAbNcPgBu+nBUpR3dFhwrA== dependencies: fast-json-stable-stringify "^2.0.0" - ts-invariant "^0.2.1" + ts-invariant "^0.4.0" tslib "^1.9.3" aproba@^1.0.3, aproba@^1.1.1: @@ -10662,6 +10653,13 @@ ts-invariant@^0.3.2: dependencies: tslib "^1.9.3" +ts-invariant@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.4.2.tgz#8685131b8083e67c66d602540e78763408be9113" + integrity sha512-PTAAn8lJPEdRBJJEs4ig6MVZWfO12yrFzV7YaPslmyhG7+4MA279y4BXT3f72gXeVl0mC1aAWq2rMX4eKTWU/Q== + dependencies: + tslib "^1.9.3" + ts-node@^8.0.3: version "8.1.0" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.1.0.tgz#8c4b37036abd448577db22a061fd7a67d47e658e" From 06ba5f8f5b73d361534d0ec34db3da9061b4fa9c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Fri, 24 May 2019 04:17:09 +0000 Subject: [PATCH 073/253] Bump @babel/core from 7.4.4 to 7.4.5 in /webapp Bumps [@babel/core](https://github.com/babel/babel) from 7.4.4 to 7.4.5. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md) - [Commits](https://github.com/babel/babel/compare/v7.4.4...v7.4.5) Signed-off-by: dependabot[bot] --- webapp/package.json | 2 +- webapp/yarn.lock | 39 ++++++++++++++++----------------------- 2 files changed, 17 insertions(+), 24 deletions(-) diff --git a/webapp/package.json b/webapp/package.json index 616a8a5f0..b44c48796 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -80,7 +80,7 @@ "zxcvbn": "^4.4.2" }, "devDependencies": { - "@babel/core": "~7.4.4", + "@babel/core": "~7.4.5", "@babel/plugin-syntax-dynamic-import": "^7.2.0", "@babel/preset-env": "~7.4.4", "@vue/cli-shared-utils": "~3.7.0", diff --git a/webapp/yarn.lock b/webapp/yarn.lock index 4e6ad32e7..eded86eca 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -21,17 +21,17 @@ dependencies: "@babel/highlight" "^7.0.0" -"@babel/core@^7.1.0", "@babel/core@^7.4.4", "@babel/core@~7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.4.tgz#84055750b05fcd50f9915a826b44fa347a825250" - integrity sha512-lQgGX3FPRgbz2SKmhMtYgJvVzGZrmjaF4apZ2bLwofAKiSjxU0drPh4S/VasyYXwaTs+A1gvQ45BN8SQJzHsQQ== +"@babel/core@^7.1.0", "@babel/core@^7.4.4", "@babel/core@~7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.5.tgz#081f97e8ffca65a9b4b0fdc7e274e703f000c06a" + integrity sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA== dependencies: "@babel/code-frame" "^7.0.0" "@babel/generator" "^7.4.4" "@babel/helpers" "^7.4.4" - "@babel/parser" "^7.4.4" + "@babel/parser" "^7.4.5" "@babel/template" "^7.4.4" - "@babel/traverse" "^7.4.4" + "@babel/traverse" "^7.4.5" "@babel/types" "^7.4.4" convert-source-map "^1.1.0" debug "^4.1.0" @@ -237,10 +237,10 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.4.tgz#5977129431b8fe33471730d255ce8654ae1250b6" - integrity sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w== +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.4.4", "@babel/parser@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.5.tgz#04af8d5d5a2b044a2a1bffacc1e5e6673544e872" + integrity sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew== "@babel/plugin-proposal-async-generator-functions@^7.2.0": version "7.2.0" @@ -673,16 +673,16 @@ "@babel/parser" "^7.4.4" "@babel/types" "^7.4.4" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.4.tgz#0776f038f6d78361860b6823887d4f3937133fe8" - integrity sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A== +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.5.tgz#4e92d1728fd2f1897dafdd321efbff92156c3216" + integrity sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A== dependencies: "@babel/code-frame" "^7.0.0" "@babel/generator" "^7.4.4" "@babel/helper-function-name" "^7.1.0" "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.4.4" + "@babel/parser" "^7.4.5" "@babel/types" "^7.4.4" debug "^4.1.0" globals "^11.1.0" @@ -9507,14 +9507,7 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.7, resolve@^1.10.0, resolve@^1.2.0, resolve@^1.3.2, resolve@^1.8.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.1.tgz#664842ac960795bbe758221cdccda61fb64b5f18" - integrity sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA== - dependencies: - path-parse "^1.0.6" - -resolve@^1.10.1, resolve@^1.5.0: +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.2.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: version "1.11.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.0.tgz#4014870ba296176b86343d50b60f3b50609ce232" integrity sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw== From abfe710d61caa2c193c077e5d6ed380d26374bca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Fri, 24 May 2019 04:17:10 +0000 Subject: [PATCH 074/253] Bump @babel/preset-env from 7.4.4 to 7.4.5 in /webapp Bumps [@babel/preset-env](https://github.com/babel/babel) from 7.4.4 to 7.4.5. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md) - [Commits](https://github.com/babel/babel/compare/v7.4.4...v7.4.5) Signed-off-by: dependabot[bot] --- webapp/package.json | 2 +- webapp/yarn.lock | 110 +++++++++++++++++++++----------------------- 2 files changed, 53 insertions(+), 59 deletions(-) diff --git a/webapp/package.json b/webapp/package.json index 616a8a5f0..8cfbc8fd9 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -82,7 +82,7 @@ "devDependencies": { "@babel/core": "~7.4.4", "@babel/plugin-syntax-dynamic-import": "^7.2.0", - "@babel/preset-env": "~7.4.4", + "@babel/preset-env": "~7.4.5", "@vue/cli-shared-utils": "~3.7.0", "@vue/eslint-config-prettier": "~4.0.1", "@vue/server-test-utils": "~1.0.0-beta.29", diff --git a/webapp/yarn.lock b/webapp/yarn.lock index 4e6ad32e7..5c196727d 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -495,12 +495,12 @@ "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-named-capturing-groups-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.4.tgz#5611d96d987dfc4a3a81c4383bb173361037d68d" - integrity sha512-Ki+Y9nXBlKfhD+LXaRS7v95TtTGYRAf9Y1rTDiE75zf8YQz4GDaWRXosMfJBXxnk88mGFjWdCRIeqDbon7spYA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz#9d269fd28a370258199b4294736813a60bbdd106" + integrity sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg== dependencies: - regexp-tree "^0.1.0" + regexp-tree "^0.1.6" "@babel/plugin-transform-new-target@^7.4.4": version "7.4.4" @@ -533,12 +533,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-regenerator@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.4.tgz#5b4da4df79391895fca9e28f99e87e22cfc02072" - integrity sha512-Zz3w+pX1SI0KMIiqshFZkwnVGUhDZzpX2vtPzfJBKQQq8WsP/Xy9DNdELWivxcKOCX/Pywge4SiEaPaLtoDT4g== +"@babel/plugin-transform-regenerator@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" + integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== dependencies: - regenerator-transform "^0.13.4" + regenerator-transform "^0.14.0" "@babel/plugin-transform-reserved-words@^7.2.0": version "7.2.0" @@ -603,10 +603,10 @@ "@babel/helper-regex" "^7.4.4" regexpu-core "^4.5.4" -"@babel/preset-env@^7.4.4", "@babel/preset-env@~7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.4.4.tgz#b6f6825bfb27b3e1394ca3de4f926482722c1d6f" - integrity sha512-FU1H+ACWqZZqfw1x2G1tgtSSYSfxJLkpaUQL37CenULFARDo+h4xJoVHzRoHbK+85ViLciuI7ME4WTIhFRBBlw== +"@babel/preset-env@^7.4.4", "@babel/preset-env@~7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.4.5.tgz#2fad7f62983d5af563b5f3139242755884998a58" + integrity sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -637,12 +637,12 @@ "@babel/plugin-transform-modules-commonjs" "^7.4.4" "@babel/plugin-transform-modules-systemjs" "^7.4.4" "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5" "@babel/plugin-transform-new-target" "^7.4.4" "@babel/plugin-transform-object-super" "^7.2.0" "@babel/plugin-transform-parameters" "^7.4.4" "@babel/plugin-transform-property-literals" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.4.4" + "@babel/plugin-transform-regenerator" "^7.4.5" "@babel/plugin-transform-reserved-words" "^7.2.0" "@babel/plugin-transform-shorthand-properties" "^7.2.0" "@babel/plugin-transform-spread" "^7.2.0" @@ -651,8 +651,8 @@ "@babel/plugin-transform-typeof-symbol" "^7.2.0" "@babel/plugin-transform-unicode-regex" "^7.4.4" "@babel/types" "^7.4.4" - browserslist "^4.5.2" - core-js-compat "^3.0.0" + browserslist "^4.6.0" + core-js-compat "^3.1.1" invariant "^2.2.2" js-levenshtein "^1.1.3" semver "^5.5.0" @@ -2655,14 +2655,14 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.4.2, browserslist@^4.5.2, browserslist@^4.5.4: - version "4.5.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.5.6.tgz#ea42e8581ca2513fa7f371d4dd66da763938163d" - integrity sha512-o/hPOtbU9oX507lIqon+UvPYqpx3mHc8cV3QemSBTXwkG8gSQSK6UKvXcE/DcleU3+A59XTUHyCvZ5qGy8xVAg== +browserslist@^4.0.0, browserslist@^4.4.2, browserslist@^4.5.4, browserslist@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.0.tgz#5274028c26f4d933d5b1323307c1d1da5084c9ff" + integrity sha512-Jk0YFwXBuMOOol8n6FhgkDzn3mY9PYLYGk29zybF05SbRTsMgPqmTNeQQhOghCxq5oFqAXE3u4sYddr4C0uRhg== dependencies: - caniuse-lite "^1.0.30000963" - electron-to-chromium "^1.3.127" - node-releases "^1.1.17" + caniuse-lite "^1.0.30000967" + electron-to-chromium "^1.3.133" + node-releases "^1.1.19" bser@^2.0.0: version "2.0.0" @@ -2839,7 +2839,7 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000939, caniuse-lite@^1.0.30000957, caniuse-lite@^1.0.30000963, caniuse-lite@^1.0.30000967: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000939, caniuse-lite@^1.0.30000957, caniuse-lite@^1.0.30000967: version "1.0.30000967" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000967.tgz#a5039577806fccee80a04aaafb2c0890b1ee2f73" integrity sha512-rUBIbap+VJfxTzrM4akJ00lkvVb5/n5v3EGXfWzSH5zT8aJmGzjA8HWhJ4U6kCpzxozUSnB+yvAYDRPY6mRpgQ== @@ -3313,31 +3313,25 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.0.1.tgz#bff73ba31ca8687431b9c88f78d3362646fb76f0" - integrity sha512-2pC3e+Ht/1/gD7Sim/sqzvRplMiRnFQVlPpDVaHtY9l7zZP7knamr3VRD6NyGfHd84MrDC0tAM9ulNxYMW0T3g== +core-js-compat@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.1.2.tgz#c29ab9722517094b98622175e2218c3b7398176d" + integrity sha512-X0Ch5f6itrHxhg5HSJucX6nNLNAGr+jq+biBh6nPGc3YAWz2a8p/ZIZY8cUkDzSRNG54omAuu3hoEF8qZbu/6Q== dependencies: - browserslist "^4.5.4" - core-js "3.0.1" - core-js-pure "3.0.1" + browserslist "^4.6.0" + core-js-pure "3.1.2" semver "^6.0.0" -core-js-pure@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.0.1.tgz#37358fb0d024e6b86d443d794f4e37e949098cbe" - integrity sha512-mSxeQ6IghKW3MoyF4cz19GJ1cMm7761ON+WObSyLfTu/Jn3x7w4NwNFnrZxgl4MTSvYYepVLNuRtlB4loMwJ5g== +core-js-pure@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.1.2.tgz#62fc435f35b7374b9b782013cdcb2f97e9f6dffa" + integrity sha512-5ckIdBF26B3ldK9PM177y2ZcATP2oweam9RskHSoqfZCrJ2As6wVg8zJ1zTriFsZf6clj/N1ThDFRGaomMsh9w== core-js@3.0.0-beta.13: version "3.0.0-beta.13" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.0.0-beta.13.tgz#7732c69be5e4758887917235fe7c0352c4cb42a1" integrity sha512-16Q43c/3LT9NyePUJKL8nRIQgYWjcBhjJSMWg96PVSxoS0PeE0NHitPI3opBrs9MGGHjte1KoEVr9W63YKlTXQ== -core-js@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.0.1.tgz#1343182634298f7f38622f95e73f54e48ddf4738" - integrity sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew== - core-js@^2.4.0, core-js@^2.6.5: version "2.6.5" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" @@ -4048,10 +4042,10 @@ ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ== -electron-to-chromium@^1.3.127: - version "1.3.133" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.133.tgz#c47639c19b91feee3e22fad69f5556142007008c" - integrity sha512-lyoC8aoqbbDqsprb6aPdt9n3DpOZZzdz/T4IZKsR0/dkZIxnJVUjjcpOSwA66jPRIOyDAamCTAUqweU05kKNSg== +electron-to-chromium@^1.3.133: + version "1.3.137" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.137.tgz#ba7c88024984c038a5c5c434529aabcea7b42944" + integrity sha512-kGi32g42a8vS/WnYE7ELJyejRT7hbr3UeOOu0WeuYuQ29gCpg9Lrf6RdcTQVXSt/v0bjCfnlb/EWOOsiKpTmkw== elliptic@^6.0.0: version "6.4.1" @@ -7443,10 +7437,10 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" -node-releases@^1.1.17: - version "1.1.18" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.18.tgz#cc98fd75598a324a77188ebddf6650e9cbd8b1d5" - integrity sha512-/mnVgm6u/8OwlIsoyRXtTI0RfQcxZoAZbdwyXap0EeWwcOpDDymyCHM2/aR9XKmHXrvizHoPAOs0pcbiJ6RUaA== +node-releases@^1.1.19: + version "1.1.21" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.21.tgz#46c86f9adaceae4d63c75d3c2f2e6eee618e55f3" + integrity sha512-TwnURTCjc8a+ElJUjmDqU6+12jhli1Q61xOQmdZ7ECZVBZuQpN/1UnembiIHDM1wCcfLvh5wrWXUF5H6ufX64Q== dependencies: semver "^5.3.0" @@ -9311,10 +9305,10 @@ regenerator-runtime@^0.13.2: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== -regenerator-transform@^0.13.4: - version "0.13.4" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.4.tgz#18f6763cf1382c69c36df76c6ce122cc694284fb" - integrity sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A== +regenerator-transform@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.0.tgz#2ca9aaf7a2c239dd32e4761218425b8c7a86ecaf" + integrity sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w== dependencies: private "^0.1.6" @@ -9326,10 +9320,10 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp-tree@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.6.tgz#84900fa12fdf428a2ac25f04300382a7c0148479" - integrity sha512-LFrA98Dw/heXqDojz7qKFdygZmFoiVlvE1Zp7Cq2cvF+ZA+03Gmhy0k0PQlsC1jvHPiTUSs+pDHEuSWv6+6D7w== +regexp-tree@^0.1.6: + version "0.1.10" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.10.tgz#d837816a039c7af8a8d64d7a7c3cf6a1d93450bc" + integrity sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ== regexpp@^2.0.1: version "2.0.1" From fcf6b394f3b49ee69ebd6ba2db6948ebce62ff45 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Fri, 24 May 2019 04:19:27 +0000 Subject: [PATCH 075/253] Bump tiptap-extensions from 1.19.10 to 1.20.1 in /webapp Bumps [tiptap-extensions](https://github.com/scrumpy/tiptap) from 1.19.10 to 1.20.1. - [Release notes](https://github.com/scrumpy/tiptap/releases) - [Commits](https://github.com/scrumpy/tiptap/compare/tiptap-extensions@1.19.10...tiptap-extensions@1.20.1) Signed-off-by: dependabot[bot] --- webapp/package.json | 2 +- webapp/yarn.lock | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/webapp/package.json b/webapp/package.json index 7b077f8f1..24cc11e11 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -71,7 +71,7 @@ "stack-utils": "^1.0.2", "string-hash": "^1.1.3", "tiptap": "1.20.1", - "tiptap-extensions": "1.19.10", + "tiptap-extensions": "1.20.1", "v-tooltip": "~2.0.2", "vue-count-to": "~1.0.13", "vue-izitoast": "1.1.2", diff --git a/webapp/yarn.lock b/webapp/yarn.lock index 1a4234e66..dff620d81 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -10472,10 +10472,10 @@ tiptap-commands@^1.10.5: prosemirror-utils "^0.8.2" tiptap-utils "^1.5.3" -tiptap-extensions@1.19.10: - version "1.19.10" - resolved "https://registry.yarnpkg.com/tiptap-extensions/-/tiptap-extensions-1.19.10.tgz#d6e695a31ac13afcfedb595f8271baa452dcbc27" - integrity sha512-KNrG75L2E+aWEnFYaBa4bUot4d9IftzJ3IVU5ZgCoM8HtzNzidWyiy1iyFJvlIycUriqGt95aUF80dfDU3G8Yg== +tiptap-extensions@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/tiptap-extensions/-/tiptap-extensions-1.20.1.tgz#fee879f27d2016176dda57d7d0ecef0e457ad3bf" + integrity sha512-YyWKvZe6AMU6PeyKWqHg545/8OYbNWYOWmnDm3DWhQICBOnx0Oj7rYnuXyfDFLPeqD38KtSlDXGOvcpzENygXg== dependencies: lowlight "^1.12.1" prosemirror-collab "^1.1.1" @@ -10486,7 +10486,7 @@ tiptap-extensions@1.19.10: prosemirror-transform "^1.1.3" prosemirror-utils "^0.8.2" prosemirror-view "^1.9.6" - tiptap "^1.19.8" + tiptap "^1.20.1" tiptap-commands "^1.10.5" tiptap-utils@^1.5.3: @@ -10499,7 +10499,7 @@ tiptap-utils@^1.5.3: prosemirror-tables "^0.8.0" prosemirror-utils "^0.8.2" -tiptap@1.20.1, tiptap@^1.19.8: +tiptap@1.20.1, tiptap@^1.20.1: version "1.20.1" resolved "https://registry.yarnpkg.com/tiptap/-/tiptap-1.20.1.tgz#d10fd0cd73a96bbb1f2d581da02ceda38fa8695b" integrity sha512-uVGxPknq+cQH0G8yyCHvo8p3jPMLZMnkLeFjcrTyiY9PXl6XsSJwOjtIg4GXnIyCcfz2jWI5mhJGzCD26cdJGA== From cebd1046c7af146c814fd848b0a04ad6083d0569 Mon Sep 17 00:00:00 2001 From: Matt Rider Date: Fri, 24 May 2019 01:26:37 -0300 Subject: [PATCH 076/253] Write cypress tests, show dropzone conditionally - If it's the user's profile, show vueDropzone, if not show just the user's avatar - apollo mutation is being called twice for drag and drop events --- cypress/fixtures/onourjourney.png | Bin 0 -> 51114 bytes cypress/integration/common/profile.js | 34 ++++++++++++++++++ cypress/integration/common/settings.js | 1 + .../UploadUserProfileImage.feature | 18 ++++++++++ cypress/support/commands.js | 2 +- package.json | 1 + webapp/components/Upload/index.vue | 5 ++- webapp/components/Upload/spec.js | 27 +++++++------- webapp/pages/profile/_id/_slug.vue | 14 ++++++-- yarn.lock | 5 +++ 10 files changed, 91 insertions(+), 16 deletions(-) create mode 100644 cypress/fixtures/onourjourney.png create mode 100644 cypress/integration/common/profile.js create mode 100644 cypress/integration/user_profile/UploadUserProfileImage.feature diff --git a/cypress/fixtures/onourjourney.png b/cypress/fixtures/onourjourney.png new file mode 100644 index 0000000000000000000000000000000000000000..8e606fabd319928c43a488ccbcdd48236e3ab4a3 GIT binary patch literal 51114 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 JOQm2z{}+(50N4Nk literal 0 HcmV?d00001 diff --git a/cypress/integration/common/profile.js b/cypress/integration/common/profile.js new file mode 100644 index 000000000..cb5689f63 --- /dev/null +++ b/cypress/integration/common/profile.js @@ -0,0 +1,34 @@ +import { When, Then } from 'cypress-cucumber-preprocessor/steps' + +/* global cy */ + +When('I visit my profile page', () => { + cy.openPage('profile/peter-pan') +}) + +Then('I should be able to change my profile picture', () => { + const avatarUpload = 'onourjourney.png' + + cy.fixture(avatarUpload, 'base64').then(fileContent => { + cy.get('#customdropzone').upload( + { fileContent, fileName: avatarUpload, mimeType: 'image/png' }, + { subjectType: 'drag-n-drop' }, + ) + }) + cy.get('#customdropzone') + .should('have.attr', 'style') + .and('contains', 'onourjourney') + cy.contains('.iziToast-message', 'Upload successful') + .should('have.length', 1) +}) + +When("I visit another user's profile page", () => { + cy.openPage('profile/peter-pan') +}) + +Then('I cannot upload a picture', () => { + cy.get('.ds-card-content') + .children() + .should('not.have.id', 'customdropzone') + .should('have.class', 'ds-avatar') +}) \ No newline at end of file diff --git a/cypress/integration/common/settings.js b/cypress/integration/common/settings.js index b6621ec87..664ffcff8 100644 --- a/cypress/integration/common/settings.js +++ b/cypress/integration/common/settings.js @@ -45,6 +45,7 @@ When('people visit my profile page', url => { cy.openPage('/profile/peter-pan') }) + When('they can see the text in the info box below my avatar', () => { cy.contains(aboutMeText) }) diff --git a/cypress/integration/user_profile/UploadUserProfileImage.feature b/cypress/integration/user_profile/UploadUserProfileImage.feature new file mode 100644 index 000000000..b46a31de8 --- /dev/null +++ b/cypress/integration/user_profile/UploadUserProfileImage.feature @@ -0,0 +1,18 @@ +Feature: Upload UserProfile Image + As a user + I would like to be able to add an avatar/profile pic to my profile + So that I can personalize my profile + + + Background: + Given I have a user account + + Scenario: Change my UserProfile Image + Given I am logged in + And I visit my profile page + Then I should be able to change my profile picture + + Scenario: Unable to change another user's avatar + Given I am logged in with a "user" role + And I visit another user's profile page + Then I cannot upload a picture \ No newline at end of file diff --git a/cypress/support/commands.js b/cypress/support/commands.js index a7cb76a27..f6253af20 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -13,7 +13,7 @@ // Cypress.Commands.add('login', (email, password) => { ... }) /* globals Cypress cy */ - +import 'cypress-file-upload' import { getLangByName } from './helpers' import users from '../fixtures/users.json' diff --git a/package.json b/package.json index 272e7785e..90b1aa8aa 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "cross-env": "^5.2.0", "cypress": "^3.3.0", "cypress-cucumber-preprocessor": "^1.11.2", + "cypress-file-upload": "^3.1.2", "cypress-plugin-retries": "^1.2.1", "dotenv": "^8.0.0", "faker": "^4.1.0", diff --git a/webapp/components/Upload/index.vue b/webapp/components/Upload/index.vue index 74222b14b..3e46a09a9 100644 --- a/webapp/components/Upload/index.vue +++ b/webapp/components/Upload/index.vue @@ -36,8 +36,11 @@ export default { computed: { backgroundImage() { const { avatar } = this.user || {} + const userAvatar = avatar.startsWith('/') + ? avatar.replace('/', '/api/') + : avatar return { - backgroundImage: `url(/api${avatar})` + backgroundImage: `url(${userAvatar})` } } }, diff --git a/webapp/components/Upload/spec.js b/webapp/components/Upload/spec.js index 22eaa9b6c..52cf5bb8c 100644 --- a/webapp/components/Upload/spec.js +++ b/webapp/components/Upload/spec.js @@ -13,10 +13,14 @@ describe('Upload', () => { const mocks = { $apollo: { - mutate: jest.fn().mockResolvedValueOnce({ - data: { UpdateUser: { id: 'upload1', avatar: '/upload/avatar.jpg' } } - }) - .mockRejectedValue({ message: 'File upload unsuccessful! Whatcha gonna do?' }) + mutate: jest + .fn() + .mockResolvedValueOnce({ + data: { UpdateUser: { id: 'upload1', avatar: '/upload/avatar.jpg' } } + }) + .mockRejectedValue({ + message: 'File upload unsuccessful! Whatcha gonna do?' + }) }, $toast: { success: jest.fn(), @@ -37,15 +41,14 @@ describe('Upload', () => { remove: jest.fn(), add: jest.fn() }, - querySelectorAll: jest.fn().mockReturnValue( - [ - { - alt: '', - style: { - 'background-image': '/api/generic.jpg' - } + querySelectorAll: jest.fn().mockReturnValue([ + { + alt: '', + style: { + 'background-image': '/api/generic.jpg' } - ]) + } + ]) } } diff --git a/webapp/pages/profile/_id/_slug.vue b/webapp/pages/profile/_id/_slug.vue index 6887eece2..387ada3cb 100644 --- a/webapp/pages/profile/_id/_slug.vue +++ b/webapp/pages/profile/_id/_slug.vue @@ -14,7 +14,17 @@ :class="{'disabled-content': user.disabled}" style="position: relative; height: auto;" > - + + - {{ link.username }} + {{ 'link.username' }} diff --git a/yarn.lock b/yarn.lock index e363d28ea..491979c13 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1815,6 +1815,11 @@ cypress-cucumber-preprocessor@^1.11.2: glob "^7.1.2" through "^2.3.8" +cypress-file-upload@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cypress-file-upload/-/cypress-file-upload-3.1.2.tgz#4a0024f99ca157565bf2b20c110e6e6874da28cb" + integrity sha512-gZE2G7ZTD2Y8APrcgs+ATRMKs/IgH2rafCmi+8o99q5sDoNRLR+XKxOcoyWLehj9raGnO98YDYO8DY7k1VMGBw== + cypress-plugin-retries@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/cypress-plugin-retries/-/cypress-plugin-retries-1.2.1.tgz#0ae296e41c00c1aa1c2da83750e84c8a684e1c6b" From 5b21107f9e7cc1ec033e7ab9695616825647f227 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Fri, 24 May 2019 04:51:46 +0000 Subject: [PATCH 077/253] Bump eslint-plugin-node from 9.0.1 to 9.1.0 in /backend Bumps [eslint-plugin-node](https://github.com/mysticatea/eslint-plugin-node) from 9.0.1 to 9.1.0. - [Release notes](https://github.com/mysticatea/eslint-plugin-node/releases) - [Commits](https://github.com/mysticatea/eslint-plugin-node/compare/v9.0.1...v9.1.0) Signed-off-by: dependabot[bot] --- backend/package.json | 2 +- backend/yarn.lock | 25 ++++++++++--------------- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/backend/package.json b/backend/package.json index 1bb801452..692ff6917 100644 --- a/backend/package.json +++ b/backend/package.json @@ -99,7 +99,7 @@ "eslint-config-prettier": "~4.3.0", "eslint-plugin-import": "~2.17.2", "eslint-plugin-jest": "~22.6.4", - "eslint-plugin-node": "~9.0.1", + "eslint-plugin-node": "~9.1.0", "eslint-plugin-prettier": "~3.1.0", "eslint-plugin-promise": "~4.1.1", "eslint-plugin-standard": "~4.0.0", diff --git a/backend/yarn.lock b/backend/yarn.lock index 04d820c76..1ab3515f3 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -3065,17 +3065,17 @@ eslint-plugin-jest@~22.6.4: resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.6.4.tgz#2895b047dd82f90f43a58a25cf136220a21c9104" integrity sha512-36OqnZR/uMCDxXGmTsqU4RwllR0IiB/XF8GW3ODmhsjiITKuI0GpgultWFt193ipN3HARkaIcKowpE6HBvRHNg== -eslint-plugin-node@~9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-9.0.1.tgz#93e44626fa62bcb6efea528cee9687663dc03b62" - integrity sha512-fljT5Uyy3lkJzuqhxrYanLSsvaILs9I7CmQ31atTtZ0DoIzRbbvInBh4cQ1CrthFHInHYBQxfPmPt6KLHXNXdw== +eslint-plugin-node@~9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-9.1.0.tgz#f2fd88509a31ec69db6e9606d76dabc5adc1b91a" + integrity sha512-ZwQYGm6EoV2cfLpE1wxJWsfnKUIXfM/KM09/TlorkukgCAwmkgajEJnPCmyzoFPQQkmvo5DrW/nyKutNIw36Mw== dependencies: eslint-plugin-es "^1.4.0" eslint-utils "^1.3.1" ignore "^5.1.1" minimatch "^3.0.4" resolve "^1.10.1" - semver "^6.0.0" + semver "^6.1.0" eslint-plugin-prettier@~3.1.0: version "3.1.0" @@ -6848,20 +6848,15 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" - integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== - -semver@^5.7.0: +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: version "5.7.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== -semver@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.0.0.tgz#05e359ee571e5ad7ed641a6eec1e547ba52dea65" - integrity sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ== +semver@^6.0.0, semver@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.0.tgz#e95dc415d45ecf03f2f9f83b264a6b11f49c0cca" + integrity sha512-kCqEOOHoBcFs/2Ccuk4Xarm/KiWRSLEX9CAZF8xkJ6ZPlIoTZ8V5f7J16vYLJqDbR7KrxTJpR2lqjIEm2Qx9cQ== send@0.17.1: version "0.17.1" From e4fe58035cb40dc34d9d6d4d1d7934af4b1d13b4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Fri, 24 May 2019 04:52:11 +0000 Subject: [PATCH 078/253] Bump graphql from 14.3.0 to 14.3.1 in /backend Bumps [graphql](https://github.com/graphql/graphql-js) from 14.3.0 to 14.3.1. - [Release notes](https://github.com/graphql/graphql-js/releases) - [Commits](https://github.com/graphql/graphql-js/compare/v14.3.0...v14.3.1) Signed-off-by: dependabot[bot] --- backend/package.json | 2 +- backend/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/package.json b/backend/package.json index 1bb801452..8c9d19e31 100644 --- a/backend/package.json +++ b/backend/package.json @@ -58,7 +58,7 @@ "dotenv": "~8.0.0", "express": "~4.17.0", "faker": "~4.1.0", - "graphql": "~14.3.0", + "graphql": "~14.3.1", "graphql-custom-directives": "~0.2.14", "graphql-iso-date": "~3.6.1", "graphql-middleware": "~3.0.2", diff --git a/backend/yarn.lock b/backend/yarn.lock index 04d820c76..0d691d86f 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -3861,10 +3861,10 @@ graphql-yoga@~1.17.4: graphql-tools "^4.0.0" subscriptions-transport-ws "^0.9.8" -"graphql@^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0", graphql@^14.2.1, graphql@~14.3.0: - version "14.3.0" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.3.0.tgz#34dd36faa489ff642bcd25df6c3b4f988a1a2f3e" - integrity sha512-MdfI4v7kSNC3NhB7cF8KNijDsifuWO2XOtzpyququqaclO8wVuChYv+KogexDwgP5sp7nFI9Z6N4QHgoLkfjrg== +"graphql@^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0", graphql@^14.2.1, graphql@~14.3.1: + version "14.3.1" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.3.1.tgz#b3aa50e61a841ada3c1f9ccda101c483f8e8c807" + integrity sha512-FZm7kAa3FqKdXy8YSSpAoTtyDFMIYSpCDOr+3EqlI1bxmtHu+Vv/I2vrSeT1sBOEnEniX3uo4wFhFdS/8XN6gA== dependencies: iterall "^1.2.2" From c89f9143a6ec3f54e2f570259aea8b9d31788c15 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Fri, 24 May 2019 04:57:49 +0000 Subject: [PATCH 079/253] Bump cypress from 3.3.0 to 3.3.1 Bumps [cypress](https://github.com/cypress-io/cypress) from 3.3.0 to 3.3.1. - [Release notes](https://github.com/cypress-io/cypress/releases) - [Commits](https://github.com/cypress-io/cypress/compare/v3.3.0...v3.3.1) 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 97dd53c3c..0c2e47271 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "devDependencies": { "codecov": "^3.5.0", "cross-env": "^5.2.0", - "cypress": "^3.3.0", + "cypress": "^3.3.1", "cypress-cucumber-preprocessor": "^1.11.2", "cypress-plugin-retries": "^1.2.2", "dotenv": "^8.0.0", diff --git a/yarn.lock b/yarn.lock index ea84a058b..16acc6407 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1820,10 +1820,10 @@ cypress-plugin-retries@^1.2.2: resolved "https://registry.yarnpkg.com/cypress-plugin-retries/-/cypress-plugin-retries-1.2.2.tgz#7235371ca575ad9e16f883169e7f1588379f80f2" integrity sha512-+bVAqJAIwpFQbgM1mAdTgCXXhowEK0pF5DqhId2h0Wq+HQ+QQ2w3hspisVUPTY+HGvncMkddUQQGF5fATuaTvQ== -cypress@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-3.3.0.tgz#d8bc261a8ae2444bde7c9a70e077236f91b897bc" - integrity sha512-v/zMPfGe8NdMUUQRx3QyfYbZoIBxJMAFvRzwpTtctq0L01YRFSGQ4exAUbjGvUyhSJk4j6kR29HetIb29TMxXw== +cypress@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-3.3.1.tgz#8a127b1d9fa74bff21f111705abfef58d595fdef" + integrity sha512-JIo47ZD9P3jAw7oaK7YKUoODzszJbNw41JmBrlMMiupHOlhmXvZz75htuo7mfRFPC9/1MDQktO4lX/V2+a6lGQ== dependencies: "@cypress/listr-verbose-renderer" "0.4.1" "@cypress/xvfb" "1.2.4" From a08d5c113f0b72c2f640c56e36bb715bd3994927 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Fri, 24 May 2019 05:01:30 +0000 Subject: [PATCH 080/253] Bump @nuxtjs/axios from 5.5.0 to 5.5.1 in /webapp Bumps [@nuxtjs/axios](https://github.com/nuxt-community/axios-module) from 5.5.0 to 5.5.1. - [Release notes](https://github.com/nuxt-community/axios-module/releases) - [Changelog](https://github.com/nuxt-community/axios-module/blob/dev/CHANGELOG.md) - [Commits](https://github.com/nuxt-community/axios-module/compare/v5.5.0...v5.5.1) Signed-off-by: dependabot[bot] --- webapp/package.json | 2 +- webapp/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/webapp/package.json b/webapp/package.json index 7dcb9a1c6..22b3b9bfa 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -53,7 +53,7 @@ "dependencies": { "@human-connection/styleguide": "0.5.17", "@nuxtjs/apollo": "4.0.0-rc4.2", - "@nuxtjs/axios": "~5.5.0", + "@nuxtjs/axios": "~5.5.1", "@nuxtjs/dotenv": "~1.3.0", "@nuxtjs/style-resources": "~0.1.2", "accounting": "~0.4.1", diff --git a/webapp/yarn.lock b/webapp/yarn.lock index 846df4666..6834cc20c 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -1115,10 +1115,10 @@ vue-cli-plugin-apollo "^0.20.0" webpack-node-externals "^1.7.2" -"@nuxtjs/axios@~5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@nuxtjs/axios/-/axios-5.5.0.tgz#d099691b742190b56a1627ed44821372368213c2" - integrity sha512-BumibwUpfJcsormwoRSbDxLSXqPM2yV1v7GyIPtzEWwM5jJZ4GFhleL6yeKuyfb1PEOkRtydsX/dja2TnGl2WA== +"@nuxtjs/axios@~5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@nuxtjs/axios/-/axios-5.5.1.tgz#e0eeddcbbec4f04bd705b96afd05071340169b36" + integrity sha512-MRZGuXM13D7tFf01D6LJZ7jYxIxD+poRfqgpVHbXIA/AN2FEWvVx9Sv3VlwniEM50+NqzcHHEGv4k2s2ZSSE6g== dependencies: "@nuxtjs/proxy" "^1.3.3" axios "^0.18.0" From 597ec1443c1131b1398ab352658807685480bac1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Fri, 24 May 2019 05:02:01 +0000 Subject: [PATCH 081/253] Bump eslint-plugin-node from 9.0.1 to 9.1.0 in /webapp Bumps [eslint-plugin-node](https://github.com/mysticatea/eslint-plugin-node) from 9.0.1 to 9.1.0. - [Release notes](https://github.com/mysticatea/eslint-plugin-node/releases) - [Commits](https://github.com/mysticatea/eslint-plugin-node/compare/v9.0.1...v9.1.0) Signed-off-by: dependabot[bot] --- webapp/package.json | 2 +- webapp/yarn.lock | 27 ++++++++++----------------- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/webapp/package.json b/webapp/package.json index 7dcb9a1c6..9497642b5 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -96,7 +96,7 @@ "eslint-loader": "~2.1.2", "eslint-plugin-import": "~2.17.2", "eslint-plugin-jest": "~22.5.1", - "eslint-plugin-node": "~9.0.1", + "eslint-plugin-node": "~9.1.0", "eslint-plugin-prettier": "~3.1.0", "eslint-plugin-promise": "~4.1.1", "eslint-plugin-standard": "~4.0.0", diff --git a/webapp/yarn.lock b/webapp/yarn.lock index 846df4666..9beca7139 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -4245,17 +4245,17 @@ eslint-plugin-jest@~22.5.1: resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.5.1.tgz#a31dfe9f9513c6af7c17ece4c65535a1370f060b" integrity sha512-c3WjZR/HBoi4GedJRwo2OGHa8Pzo1EbSVwQ2HFzJ+4t2OoYM7Alx646EH/aaxZ+9eGcPiq0FT0UGkRuFFx2FHg== -eslint-plugin-node@~9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-9.0.1.tgz#93e44626fa62bcb6efea528cee9687663dc03b62" - integrity sha512-fljT5Uyy3lkJzuqhxrYanLSsvaILs9I7CmQ31atTtZ0DoIzRbbvInBh4cQ1CrthFHInHYBQxfPmPt6KLHXNXdw== +eslint-plugin-node@~9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-9.1.0.tgz#f2fd88509a31ec69db6e9606d76dabc5adc1b91a" + integrity sha512-ZwQYGm6EoV2cfLpE1wxJWsfnKUIXfM/KM09/TlorkukgCAwmkgajEJnPCmyzoFPQQkmvo5DrW/nyKutNIw36Mw== dependencies: eslint-plugin-es "^1.4.0" eslint-utils "^1.3.1" ignore "^5.1.1" minimatch "^3.0.4" resolve "^1.10.1" - semver "^6.0.0" + semver "^6.1.0" eslint-plugin-prettier@^3.0.0, eslint-plugin-prettier@~3.1.0: version "3.1.0" @@ -9493,14 +9493,7 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.7, resolve@^1.10.0, resolve@^1.2.0, resolve@^1.3.2, resolve@^1.8.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.1.tgz#664842ac960795bbe758221cdccda61fb64b5f18" - integrity sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA== - dependencies: - path-parse "^1.0.6" - -resolve@^1.10.1, resolve@^1.5.0: +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.2.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: version "1.11.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.0.tgz#4014870ba296176b86343d50b60f3b50609ce232" integrity sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw== @@ -9679,10 +9672,10 @@ semver-diff@^2.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== -semver@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.0.0.tgz#05e359ee571e5ad7ed641a6eec1e547ba52dea65" - integrity sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ== +semver@^6.0.0, semver@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.0.tgz#e95dc415d45ecf03f2f9f83b264a6b11f49c0cca" + integrity sha512-kCqEOOHoBcFs/2Ccuk4Xarm/KiWRSLEX9CAZF8xkJ6ZPlIoTZ8V5f7J16vYLJqDbR7KrxTJpR2lqjIEm2Qx9cQ== semver@~5.3.0: version "5.3.0" From 51d25c1c9a5bfa11216b917f9720d63626c98a8c Mon Sep 17 00:00:00 2001 From: Matt Rider Date: Fri, 24 May 2019 08:23:50 -0300 Subject: [PATCH 082/253] Work through merge conflict --- webapp/pages/profile/_id/_slug.vue | 3 --- 1 file changed, 3 deletions(-) diff --git a/webapp/pages/profile/_id/_slug.vue b/webapp/pages/profile/_id/_slug.vue index 7b9394897..6f042a4f7 100644 --- a/webapp/pages/profile/_id/_slug.vue +++ b/webapp/pages/profile/_id/_slug.vue @@ -344,10 +344,7 @@ export default { HcLoadMore, HcEmpty, ContentMenu, -<<<<<<< HEAD HcUpload -======= ->>>>>>> 9d1dfe6067280b792b752b46608e443aa3925616 }, transition: { name: 'slide-up', From 39d4771ce1d53a6bcaf964eb78b09537d407f747 Mon Sep 17 00:00:00 2001 From: Matt Rider Date: Fri, 24 May 2019 08:48:52 -0300 Subject: [PATCH 083/253] Fix lint --- backend/src/graphql-schema.js | 4 +-- .../notifications/extractIds/index.js | 2 +- backend/src/resolvers/fileUpload/index.js | 4 +-- backend/src/resolvers/fileUpload/spec.js | 27 ++++++++++++------- backend/src/resolvers/users.js | 4 +-- backend/src/resolvers/users.spec.js | 2 +- webapp/components/Upload/index.vue | 24 ++++++++--------- webapp/components/Upload/spec.js | 26 +++++++++--------- webapp/pages/profile/_id/_slug.vue | 2 +- 9 files changed, 51 insertions(+), 44 deletions(-) diff --git a/backend/src/graphql-schema.js b/backend/src/graphql-schema.js index afceec029..a846541e7 100644 --- a/backend/src/graphql-schema.js +++ b/backend/src/graphql-schema.js @@ -36,6 +36,6 @@ export const resolvers = { ...socialMedia.Mutation, ...notifications.Mutation, ...comments.Mutation, - ...users.Mutation - } + ...users.Mutation, + }, } diff --git a/backend/src/middleware/notifications/extractIds/index.js b/backend/src/middleware/notifications/extractIds/index.js index f642484b8..c2fcf169c 100644 --- a/backend/src/middleware/notifications/extractIds/index.js +++ b/backend/src/middleware/notifications/extractIds/index.js @@ -1,7 +1,7 @@ import cheerio from 'cheerio' const ID_REGEX = /\/profile\/([\w\-.!~*'"(),]+)/g -export default function (content) { +export default function(content) { if (!content) return [] const $ = cheerio.load(content) const urls = $('.mention') diff --git a/backend/src/resolvers/fileUpload/index.js b/backend/src/resolvers/fileUpload/index.js index 85bdf920b..c37d87e39 100644 --- a/backend/src/resolvers/fileUpload/index.js +++ b/backend/src/resolvers/fileUpload/index.js @@ -7,10 +7,10 @@ const storeUpload = ({ createReadStream, fileLocation }) => createReadStream() .pipe(createWriteStream(`public${fileLocation}`)) .on('finish', resolve) - .on('error', reject) + .on('error', reject), ) -export default async function fileUpload (params, { file, url }, uploadCallback = storeUpload) { +export default async function fileUpload(params, { file, url }, uploadCallback = storeUpload) { const upload = params[file] if (upload) { diff --git a/backend/src/resolvers/fileUpload/spec.js b/backend/src/resolvers/fileUpload/spec.js index 798e4f9c5..5767d6457 100644 --- a/backend/src/resolvers/fileUpload/spec.js +++ b/backend/src/resolvers/fileUpload/spec.js @@ -10,8 +10,8 @@ describe('fileUpload', () => { filename: 'avatar.jpg', mimetype: 'image/jpeg', encoding: '7bit', - createReadStream: jest.fn() - } + createReadStream: jest.fn(), + }, } uploadCallback = jest.fn() }) @@ -34,21 +34,30 @@ describe('fileUpload', () => { }) it('creates a url safe name', async () => { - params.uploadAttribute.filename = '/path/to/awkward?/ file-location/?foo- bar-avatar.jpg?foo- bar' + params.uploadAttribute.filename = + '/path/to/awkward?/ file-location/?foo- bar-avatar.jpg?foo- bar' await fileUpload(params, { file: 'uploadAttribute', url: 'attribute' }, uploadCallback) expect(params.attribute).toMatch(/^\/uploads\/\d+-foo-bar-avatar$/) }) describe('in case of duplicates', () => { it('creates unique names to avoid overwriting existing files', async () => { - const { attribute: first } = await fileUpload({ - ...params - }, { file: 'uploadAttribute', url: 'attribute' }, uploadCallback) + const { attribute: first } = await fileUpload( + { + ...params, + }, + { file: 'uploadAttribute', url: 'attribute' }, + uploadCallback, + ) await new Promise(resolve => setTimeout(resolve, 1000)) - const { attribute: second } = await fileUpload({ - ...params - }, { file: 'uploadAttribute', url: 'attribute' }, uploadCallback) + const { attribute: second } = await fileUpload( + { + ...params, + }, + { file: 'uploadAttribute', url: 'attribute' }, + uploadCallback, + ) expect(first).not.toEqual(second) }) }) diff --git a/backend/src/resolvers/users.js b/backend/src/resolvers/users.js index 01beae522..53bf0967e 100644 --- a/backend/src/resolvers/users.js +++ b/backend/src/resolvers/users.js @@ -10,6 +10,6 @@ export default { CreateUser: async (object, params, context, resolveInfo) => { params = await fileUpload(params, { file: 'avatarUpload', url: 'avatar' }) return neo4jgraphql(object, params, context, resolveInfo, false) - } - } + }, + }, } diff --git a/backend/src/resolvers/users.spec.js b/backend/src/resolvers/users.spec.js index e81b555c5..22096b6c8 100644 --- a/backend/src/resolvers/users.spec.js +++ b/backend/src/resolvers/users.spec.js @@ -67,7 +67,7 @@ describe('users', () => { it('with no name', async () => { const variables = { id: 'u47', - name: null + name: null, } const expected = 'Username must be at least 3 characters long!' await expect(client.request(mutation, variables)).rejects.toThrow(expected) diff --git a/webapp/components/Upload/index.vue b/webapp/components/Upload/index.vue index 3e46a09a9..831edd2f8 100644 --- a/webapp/components/Upload/index.vue +++ b/webapp/components/Upload/index.vue @@ -18,10 +18,10 @@ import gql from 'graphql-tag' export default { components: { - vueDropzone + vueDropzone, }, props: { - user: { type: Object, default: null } + user: { type: Object, default: null }, }, data() { return { @@ -29,20 +29,18 @@ export default { url: this.vddrop, maxFilesize: 0.5, previewTemplate: this.template(), - dictDefaultMessage: '' - } + dictDefaultMessage: '', + }, } }, computed: { backgroundImage() { const { avatar } = this.user || {} - const userAvatar = avatar.startsWith('/') - ? avatar.replace('/', '/api/') - : avatar + const userAvatar = avatar.startsWith('/') ? avatar.replace('/', '/api/') : avatar return { - backgroundImage: `url(${userAvatar})` + backgroundImage: `url(${userAvatar})`, } - } + }, }, methods: { template() { @@ -88,15 +86,15 @@ export default { `, variables: { avatarUpload, - id: this.user.id - } + id: this.user.id, + }, }) .then(() => { this.$toast.success(this.$t('user.avatar.submitted')) }) .catch(error => this.$toast.error(error.message)) - } - } + }, + }, } diff --git a/webapp/package.json b/webapp/package.json index 3902fac01..fc9c0caeb 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -74,9 +74,9 @@ "tiptap-extensions": "1.20.1", "v-tooltip": "~2.0.2", "vue-count-to": "~1.0.13", + "vue-in-viewport-mixin": "^2.0.0", "vue-izitoast": "1.1.2", "vue-sweetalert-icons": "~3.2.0", - "vue2-dropzone": "^3.5.9", "vuex-i18n": "~1.11.0", "zxcvbn": "^4.4.2" }, diff --git a/webapp/yarn.lock b/webapp/yarn.lock index 56971c17b..b9d1c8188 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -11167,6 +11167,11 @@ vue-hot-reload-api@^2.3.0: resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.3.tgz#2756f46cb3258054c5f4723de8ae7e87302a1ccf" integrity sha512-KmvZVtmM26BQOMK1rwUZsrqxEGeKiYSZGA7SNWE6uExx8UX/cj9hq2MRV/wWC3Cq6AoeDGk57rL9YMFRel/q+g== +vue-in-viewport-mixin@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/vue-in-viewport-mixin/-/vue-in-viewport-mixin-2.0.0.tgz#696058b06608cfe777cc37c30321d71b11746f55" + integrity sha512-crTph/eA7Sub2rzCnHiCuEXrpEfFSqahCxrv2wtFkMBRtwjVUkN9knHMiYvcciVewxXyOvIRUzMAiSKImUGgsg== + vue-izitoast@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vue-izitoast/-/vue-izitoast-1.1.2.tgz#0cf8290f045f8a389ccce4c238836c75a130eb03" @@ -11281,13 +11286,6 @@ vue2-dropzone@3.5.8: dependencies: dropzone "^5.5.1" -vue2-dropzone@^3.5.9: - version "3.5.9" - resolved "https://registry.yarnpkg.com/vue2-dropzone/-/vue2-dropzone-3.5.9.tgz#a63999a45a7aad24d4c21e3d35be409b4e6bdce8" - integrity sha512-nJz6teulVKlZIAeKgvPU7wBI/gzfIgqDOrEp1okSkQIkdprDVCoM0U7XWM0NOM4AAVX+4XGRtMoocYWdTYb3bQ== - dependencies: - dropzone "^5.5.1" - vue@^2.6.10, vue@^2.6.6: version "2.6.10" resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.10.tgz#a72b1a42a4d82a721ea438d1b6bf55e66195c637" From f7e5c7bf2cbd77ced0fc0a70a74791ee5f1da4d4 Mon Sep 17 00:00:00 2001 From: aonomike Date: Mon, 3 Jun 2019 23:36:04 +0300 Subject: [PATCH 180/253] Add date relative date on comments --- webapp/components/Comment.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/webapp/components/Comment.vue b/webapp/components/Comment.vue index 751a11f02..5bce3d480 100644 --- a/webapp/components/Comment.vue +++ b/webapp/components/Comment.vue @@ -7,7 +7,7 @@
- + Date: Mon, 3 Jun 2019 22:57:46 +0200 Subject: [PATCH 181/253] fixed lint --- backend/src/schema/resolvers/socialMedia.spec.js | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/src/schema/resolvers/socialMedia.spec.js b/backend/src/schema/resolvers/socialMedia.spec.js index 18c12851c..38850761c 100644 --- a/backend/src/schema/resolvers/socialMedia.spec.js +++ b/backend/src/schema/resolvers/socialMedia.spec.js @@ -3,7 +3,6 @@ import { GraphQLClient } from 'graphql-request' import Factory from '../../seed/factories' import { host, login } from '../../jest/helpers' - const factory = Factory() describe('SocialMedia', () => { From edd71b782597a3d9f190746feb2dd39329a89977 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 3 Jun 2019 23:00:27 +0200 Subject: [PATCH 182/253] DISABLE_MIDDLEWARES now requires DEBUG=true --- backend/package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/package.json b/backend/package.json index e2abde493..573031606 100644 --- a/backend/package.json +++ b/backend/package.json @@ -11,7 +11,7 @@ "lint": "eslint src --config .eslintrc.js", "test": "run-s test:jest test:cucumber", "test:before:server": "cross-env GRAPHQL_URI=http://localhost:4123 GRAPHQL_PORT=4123 yarn run dev 2> /dev/null", - "test:before:seeder": "cross-env GRAPHQL_URI=http://localhost:4001 GRAPHQL_PORT=4001 DISABLED_MIDDLEWARES=permissions,activityPub yarn run dev 2> /dev/null", + "test:before:seeder": "cross-env GRAPHQL_URI=http://localhost:4001 GRAPHQL_PORT=4001 DEBUG=true DISABLED_MIDDLEWARES=permissions,activityPub yarn run dev 2> /dev/null", "test:jest:cmd": "wait-on tcp:4001 tcp:4123 && jest --forceExit --detectOpenHandles --runInBand", "test:cucumber:cmd": "wait-on tcp:4001 tcp:4123 && cucumber-js --require-module @babel/register --exit test/", "test:jest:cmd:debug": "wait-on tcp:4001 tcp:4123 && node --inspect-brk ./node_modules/.bin/jest -i --forceExit --detectOpenHandles --runInBand", @@ -20,7 +20,7 @@ "test:jest:debug": "run-p --race test:before:* 'test:jest:cmd:debug {@}' --", "db:script:seed": "wait-on tcp:4001 && babel-node src/seed/seed-db.js", "db:reset": "babel-node src/seed/reset-db.js", - "db:seed": "cross-env GRAPHQL_URI=http://localhost:4001 GRAPHQL_PORT=4001 DISABLED_MIDDLEWARES=permissions run-p --race dev db:script:seed" + "db:seed": "cross-env GRAPHQL_URI=http://localhost:4001 GRAPHQL_PORT=4001 DEBUG=true DISABLED_MIDDLEWARES=permissions run-p --race dev db:script:seed" }, "author": "Human Connection gGmbH", "license": "MIT", @@ -109,4 +109,4 @@ "prettier": "~1.17.1", "supertest": "~4.0.2" } -} +} \ No newline at end of file From edcc5adb41f5f4daca0416cfed6f8b892634c460 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 3 Jun 2019 23:11:48 +0200 Subject: [PATCH 183/253] corrected paths and include order --- backend/src/middleware/orderByMiddleware.spec.js | 4 ++-- backend/src/middleware/permissionsMiddleware.spec.js | 4 ++-- backend/src/middleware/slugifyMiddleware.spec.js | 4 ++-- backend/src/middleware/softDeleteMiddleware.spec.js | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/backend/src/middleware/orderByMiddleware.spec.js b/backend/src/middleware/orderByMiddleware.spec.js index af26dd233..450220cd6 100644 --- a/backend/src/middleware/orderByMiddleware.spec.js +++ b/backend/src/middleware/orderByMiddleware.spec.js @@ -1,6 +1,6 @@ -import Factory from '../../seed/factories' -import { host } from '../../jest/helpers' import { GraphQLClient } from 'graphql-request' +import Factory from '../seed/factories' +import { host } from '../jest/helpers' let client let headers diff --git a/backend/src/middleware/permissionsMiddleware.spec.js b/backend/src/middleware/permissionsMiddleware.spec.js index b15e0f281..6cf9dc302 100644 --- a/backend/src/middleware/permissionsMiddleware.spec.js +++ b/backend/src/middleware/permissionsMiddleware.spec.js @@ -1,6 +1,6 @@ -import Factory from '../../seed/factories' -import { host, login } from '../../jest/helpers' import { GraphQLClient } from 'graphql-request' +import Factory from '../seed/factories' +import { host, login } from '../jest/helpers' const factory = Factory() diff --git a/backend/src/middleware/slugifyMiddleware.spec.js b/backend/src/middleware/slugifyMiddleware.spec.js index a90baec39..79bba0a5d 100644 --- a/backend/src/middleware/slugifyMiddleware.spec.js +++ b/backend/src/middleware/slugifyMiddleware.spec.js @@ -1,6 +1,6 @@ -import Factory from '../../seed/factories' -import { host, login } from '../../jest/helpers' import { GraphQLClient } from 'graphql-request' +import Factory from '../seed/factories' +import { host, login } from '../jest/helpers' let authenticatedClient let headers diff --git a/backend/src/middleware/softDeleteMiddleware.spec.js b/backend/src/middleware/softDeleteMiddleware.spec.js index d78171c7c..388f44a3c 100644 --- a/backend/src/middleware/softDeleteMiddleware.spec.js +++ b/backend/src/middleware/softDeleteMiddleware.spec.js @@ -1,6 +1,6 @@ -import Factory from '../../seed/factories' -import { host, login } from '../../jest/helpers' import { GraphQLClient } from 'graphql-request' +import Factory from '../seed/factories' +import { host, login } from '../jest/helpers' const factory = Factory() let client From a1db7fa2013632fea215a38e37ce3bac200e809a Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 3 Jun 2019 23:13:42 +0200 Subject: [PATCH 184/253] corrected config include --- backend/src/seed/reset-db.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/seed/reset-db.js b/backend/src/seed/reset-db.js index bcc29d78f..5f4319f73 100644 --- a/backend/src/seed/reset-db.js +++ b/backend/src/seed/reset-db.js @@ -1,5 +1,5 @@ import { cleanDatabase } from './factories' -import CONFIG from './config' +import CONFIG from './../config' if (!CONFIG.DEBUG) { throw new Error(`YOU CAN'T CLEAN THE DATABASE WITH DEBUG=${CONFIG.DEBUG}`) From 15bfabcefd55afa775dc34b7eccccc0ae7978cbd Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 3 Jun 2019 23:17:58 +0200 Subject: [PATCH 185/253] check if config variables are present only when server is started --- backend/src/config/index.js | 15 ++++----------- backend/src/server.js | 7 +++++++ 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/backend/src/config/index.js b/backend/src/config/index.js index aa8b3a5dc..5cc455495 100644 --- a/backend/src/config/index.js +++ b/backend/src/config/index.js @@ -2,37 +2,30 @@ import dotenv from 'dotenv' dotenv.config() -const requiredConfigs = { +export const requiredConfigs = { MAPBOX_TOKEN: process.env.MAPBOX_TOKEN, JWT_SECRET: process.env.JWT_SECRET, PRIVATE_KEY_PASSPHRASE: process.env.PRIVATE_KEY_PASSPHRASE, } -const neo4jConfigs = { +export const neo4jConfigs = { NEO4J_URI: process.env.NEO4J_URI || 'bolt://localhost:7687', NEO4J_USERNAME: process.env.NEO4J_USERNAME || 'neo4j', NEO4J_PASSWORD: process.env.NEO4J_PASSWORD || 'neo4j', } -const serverConfigs = { +export const serverConfigs = { GRAPHQL_PORT: process.env.GRAPHQL_PORT || 4000, CLIENT_URI: process.env.CLIENT_URI || 'http://localhost:3000', GRAPHQL_URI: process.env.GRAPHQL_URI || 'http://localhost:4000', } -const developmentConfigs = { +export const developmentConfigs = { DEBUG: process.env.NODE_ENV !== 'production' && process.env.DEBUG === 'true', MOCKS: process.env.MOCKS === 'true', DISABLED_MIDDLEWARES: process.env.DISABLED_MIDDLEWARES || '', } -// check required configs and throw error -Object.entries(requiredConfigs).map(entry => { - if (!entry[1]) { - throw new Error(`ERROR: "${entry[0]}" env variable is missing.`) - } -}) - export default { ...requiredConfigs, ...neo4jConfigs, diff --git a/backend/src/server.js b/backend/src/server.js index 3431320a7..d09d94220 100644 --- a/backend/src/server.js +++ b/backend/src/server.js @@ -8,6 +8,13 @@ import { getDriver } from './bootstrap/neo4j' import decode from './jwt/decode' import schema from './schema' +// check required configs and throw error +Object.entries(CONFIG.requiredConfigs).map(entry => { + if (!entry[1]) { + throw new Error(`ERROR: "${entry[0]}" env variable is missing.`) + } +}) + const driver = getDriver() const createServer = options => { From 1a264a26623f8d4b0a36ae15b8a70847674f758a Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 3 Jun 2019 23:19:50 +0200 Subject: [PATCH 186/253] fixed config check for server --- backend/src/server.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/backend/src/server.js b/backend/src/server.js index d09d94220..15950821f 100644 --- a/backend/src/server.js +++ b/backend/src/server.js @@ -1,7 +1,7 @@ import express from 'express' import helmet from 'helmet' import { GraphQLServer } from 'graphql-yoga' -import CONFIG from './config' +import { default as CONFIG, requiredConfigs } from './config' import mocks from './mocks' import middleware from './middleware' import { getDriver } from './bootstrap/neo4j' @@ -9,7 +9,8 @@ import decode from './jwt/decode' import schema from './schema' // check required configs and throw error -Object.entries(CONFIG.requiredConfigs).map(entry => { +// TODO check this directly in config file - currently not possible due to testsetup +Object.entries(requiredConfigs).map(entry => { if (!entry[1]) { throw new Error(`ERROR: "${entry[0]}" env variable is missing.`) } From 0b270ee7c3f6cf71c0db212f25c64bcd0305c513 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 3 Jun 2019 23:24:26 +0200 Subject: [PATCH 187/253] fixed default import syntax --- backend/src/server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/server.js b/backend/src/server.js index 15950821f..7692f0d2c 100644 --- a/backend/src/server.js +++ b/backend/src/server.js @@ -1,7 +1,7 @@ import express from 'express' import helmet from 'helmet' import { GraphQLServer } from 'graphql-yoga' -import { default as CONFIG, requiredConfigs } from './config' +import CONFIG, { requiredConfigs } from './config' import mocks from './mocks' import middleware from './middleware' import { getDriver } from './bootstrap/neo4j' From 31a6d36e5945f39aec123eba658673988ded19f7 Mon Sep 17 00:00:00 2001 From: Matt Rider Date: Mon, 3 Jun 2019 18:54:39 -0300 Subject: [PATCH 188/253] Get overlay working, refactor - use arrow function for error watch property, remove let that = this --- webapp/components/Upload/index.vue | 105 ++++++++++++++++++++++------- 1 file changed, 80 insertions(+), 25 deletions(-) diff --git a/webapp/components/Upload/index.vue b/webapp/components/Upload/index.vue index 0bf777072..2548b08be 100644 --- a/webapp/components/Upload/index.vue +++ b/webapp/components/Upload/index.vue @@ -1,21 +1,31 @@ From dd624ef535fc91a98061dc8bb69aa9b27ec5b834 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 4 Jun 2019 00:10:42 +0200 Subject: [PATCH 189/253] fix for YOU CAN'T CLEAN THE DATABASE WITH DEBUG=false --- backend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/package.json b/backend/package.json index 573031606..d861f9b6c 100644 --- a/backend/package.json +++ b/backend/package.json @@ -19,7 +19,7 @@ "test:cucumber": " cross-env CLIENT_URI=http://localhost:4123 run-p --race test:before:* 'test:cucumber:cmd {@}' --", "test:jest:debug": "run-p --race test:before:* 'test:jest:cmd:debug {@}' --", "db:script:seed": "wait-on tcp:4001 && babel-node src/seed/seed-db.js", - "db:reset": "babel-node src/seed/reset-db.js", + "db:reset": "cross-env DEBUG=true babel-node src/seed/reset-db.js", "db:seed": "cross-env GRAPHQL_URI=http://localhost:4001 GRAPHQL_PORT=4001 DEBUG=true DISABLED_MIDDLEWARES=permissions run-p --race dev db:script:seed" }, "author": "Human Connection gGmbH", From 5c6147ee47e3884817bd84950a6e53df41851a0b Mon Sep 17 00:00:00 2001 From: Matt Rider Date: Mon, 3 Jun 2019 19:14:29 -0300 Subject: [PATCH 190/253] Fix broken tests, revert changes to error watch property - causing breaking change in the tests --- webapp/components/Upload/index.vue | 7 ++++--- webapp/components/Upload/spec.js | 25 ------------------------- 2 files changed, 4 insertions(+), 28 deletions(-) diff --git a/webapp/components/Upload/index.vue b/webapp/components/Upload/index.vue index 2548b08be..79ae80211 100644 --- a/webapp/components/Upload/index.vue +++ b/webapp/components/Upload/index.vue @@ -12,7 +12,7 @@
- +
@@ -46,9 +46,10 @@ export default { } }, watch: { - error: () => { + error() { + let that = this setTimeout(function() { - this.error = false + that.error = false }, 2000) }, }, diff --git a/webapp/components/Upload/spec.js b/webapp/components/Upload/spec.js index b81babb6e..68c19793c 100644 --- a/webapp/components/Upload/spec.js +++ b/webapp/components/Upload/spec.js @@ -35,26 +35,6 @@ describe('Upload', () => { }, } - const fileSuccess = { - filename: 'avatar.jpg', - previewElement: { - classList: { - remove: jest.fn(), - add: jest.fn(), - }, - querySelectorAll: jest.fn().mockReturnValue([ - { - alt: '', - style: { - 'background-image': '/api/generic.jpg', - }, - }, - ]), - }, - } - - const dataUrl = 'avatar.jpg' - beforeEach(() => { jest.useFakeTimers() wrapper = shallowMount(Upload, { localVue, propsData, mocks }) @@ -69,11 +49,6 @@ describe('Upload', () => { expect(mocks.$apollo.mutate).toHaveBeenCalledTimes(1) }) - it('thumbnail', () => { - wrapper.vm.thumbnail(fileSuccess, dataUrl) - expect(fileSuccess.previewElement.classList.add).toHaveBeenCalledTimes(1) - }) - describe('error handling', () => { const message = 'File upload failed' const fileError = { status: 'error' } From b5b6c3ef51959202325457a34bceec623d5e1521 Mon Sep 17 00:00:00 2001 From: Matt Rider Date: Mon, 3 Jun 2019 20:10:49 -0300 Subject: [PATCH 191/253] Fix cypress test --- cypress/integration/common/profile.js | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/cypress/integration/common/profile.js b/cypress/integration/common/profile.js index cb5689f63..6f522573d 100644 --- a/cypress/integration/common/profile.js +++ b/cypress/integration/common/profile.js @@ -1,10 +1,10 @@ -import { When, Then } from 'cypress-cucumber-preprocessor/steps' +import { When, Then } from 'cypress-cucumber-preprocessor/steps'; /* global cy */ When('I visit my profile page', () => { cy.openPage('profile/peter-pan') -}) +}); Then('I should be able to change my profile picture', () => { const avatarUpload = 'onourjourney.png' @@ -12,23 +12,25 @@ Then('I should be able to change my profile picture', () => { cy.fixture(avatarUpload, 'base64').then(fileContent => { cy.get('#customdropzone').upload( { fileContent, fileName: avatarUpload, mimeType: 'image/png' }, - { subjectType: 'drag-n-drop' }, - ) - }) - cy.get('#customdropzone') - .should('have.attr', 'style') + { subjectType: 'drag-n-drop' } + ); + }); + cy.get('.profile-avatar img') + .should('have.attr', 'src') .and('contains', 'onourjourney') - cy.contains('.iziToast-message', 'Upload successful') - .should('have.length', 1) -}) + cy.contains('.iziToast-message', 'Upload successful').should( + 'have.length', + 1 + ); +}); When("I visit another user's profile page", () => { cy.openPage('profile/peter-pan') -}) +}); Then('I cannot upload a picture', () => { cy.get('.ds-card-content') .children() .should('not.have.id', 'customdropzone') .should('have.class', 'ds-avatar') -}) \ No newline at end of file +}); From c6cadc60c378d8e1bafec42a33e29e78ce487a16 Mon Sep 17 00:00:00 2001 From: Matt Rider Date: Mon, 3 Jun 2019 21:23:11 -0300 Subject: [PATCH 192/253] Remove semicolons added with .vscode linting, unused library --- cypress/integration/common/profile.js | 16 ++++++++-------- webapp/package.json | 1 - webapp/yarn.lock | 5 ----- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/cypress/integration/common/profile.js b/cypress/integration/common/profile.js index 6f522573d..1df1e2652 100644 --- a/cypress/integration/common/profile.js +++ b/cypress/integration/common/profile.js @@ -1,10 +1,10 @@ -import { When, Then } from 'cypress-cucumber-preprocessor/steps'; +import { When, Then } from 'cypress-cucumber-preprocessor/steps' /* global cy */ When('I visit my profile page', () => { cy.openPage('profile/peter-pan') -}); +}) Then('I should be able to change my profile picture', () => { const avatarUpload = 'onourjourney.png' @@ -13,24 +13,24 @@ Then('I should be able to change my profile picture', () => { cy.get('#customdropzone').upload( { fileContent, fileName: avatarUpload, mimeType: 'image/png' }, { subjectType: 'drag-n-drop' } - ); - }); + ) + }) cy.get('.profile-avatar img') .should('have.attr', 'src') .and('contains', 'onourjourney') cy.contains('.iziToast-message', 'Upload successful').should( 'have.length', 1 - ); -}); + ) +}) When("I visit another user's profile page", () => { cy.openPage('profile/peter-pan') -}); +}) Then('I cannot upload a picture', () => { cy.get('.ds-card-content') .children() .should('not.have.id', 'customdropzone') .should('have.class', 'ds-avatar') -}); +}) diff --git a/webapp/package.json b/webapp/package.json index 3541c87de..091301ec9 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -73,7 +73,6 @@ "tiptap-extensions": "1.20.2", "v-tooltip": "~2.0.2", "vue-count-to": "~1.0.13", - "vue-in-viewport-mixin": "^2.0.0", "vue-izitoast": "1.1.2", "vue-sweetalert-icons": "~3.2.0", "vuex-i18n": "~1.11.0", diff --git a/webapp/yarn.lock b/webapp/yarn.lock index 469680cb0..163f9372e 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -11198,11 +11198,6 @@ vue-hot-reload-api@^2.3.0: resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.3.tgz#2756f46cb3258054c5f4723de8ae7e87302a1ccf" integrity sha512-KmvZVtmM26BQOMK1rwUZsrqxEGeKiYSZGA7SNWE6uExx8UX/cj9hq2MRV/wWC3Cq6AoeDGk57rL9YMFRel/q+g== -vue-in-viewport-mixin@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/vue-in-viewport-mixin/-/vue-in-viewport-mixin-2.0.0.tgz#696058b06608cfe777cc37c30321d71b11746f55" - integrity sha512-crTph/eA7Sub2rzCnHiCuEXrpEfFSqahCxrv2wtFkMBRtwjVUkN9knHMiYvcciVewxXyOvIRUzMAiSKImUGgsg== - vue-izitoast@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vue-izitoast/-/vue-izitoast-1.1.2.tgz#0cf8290f045f8a389ccce4c238836c75a130eb03" From b9c8d35defb3f4c3c572fe490f73005f9b85ba45 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" Date: Tue, 4 Jun 2019 04:59:26 +0000 Subject: [PATCH 193/253] Bump tippy.js from 4.3.1 to 4.3.2 in /webapp Bumps [tippy.js](https://github.com/atomiks/tippyjs) from 4.3.1 to 4.3.2. - [Release notes](https://github.com/atomiks/tippyjs/releases) - [Commits](https://github.com/atomiks/tippyjs/compare/v4.3.1...v4.3.2) --- webapp/package.json | 2 +- webapp/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/webapp/package.json b/webapp/package.json index a06ff5c7d..880db60d1 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -107,7 +107,7 @@ "nodemon": "~1.19.1", "prettier": "~1.17.1", "sass-loader": "~7.1.0", - "tippy.js": "^4.3.1", + "tippy.js": "^4.3.2", "vue-jest": "~3.0.4", "vue-svg-loader": "~0.12.0" } diff --git a/webapp/yarn.lock b/webapp/yarn.lock index 1d9fe2e7e..609e92c73 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -10555,10 +10555,10 @@ timsort@^0.3.0: resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= -tippy.js@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-4.3.1.tgz#ea38fa7e1a2e3448ac35faa5115ccbb8414f50aa" - integrity sha512-H09joePakSu6eDSL1wj5LjEWwvpEELyJQlgsts4wVH7223t4DlyzGCaZNDO8/MQAnSuic4JhKpXtgzSYGlobvg== +tippy.js@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-4.3.2.tgz#f785d96fd03d890aa118646e1a873f851bd1c8b4" + integrity sha512-vSdVU8zkhsdCFegwtKq7WJfF29xo4Qiq5GWPZEjKbW4knogI43HJHPAOCUkxbi28gKTTgiWF+GveZgTqhS9QOw== dependencies: popper.js "^1.14.7" From 19667762ce033b66528891c5c79620501bfde63b Mon Sep 17 00:00:00 2001 From: Matt Rider Date: Tue, 4 Jun 2019 07:52:21 -0300 Subject: [PATCH 194/253] Remove unneeded/unused code --- webapp/components/Upload/index.vue | 3 --- 1 file changed, 3 deletions(-) diff --git a/webapp/components/Upload/index.vue b/webapp/components/Upload/index.vue index 79ae80211..5f3ae96f6 100644 --- a/webapp/components/Upload/index.vue +++ b/webapp/components/Upload/index.vue @@ -16,9 +16,6 @@ -
- -
From 57a253637cd228bb206cea6dfd401a2499c94f82 Mon Sep 17 00:00:00 2001 From: Matt Rider Date: Tue, 4 Jun 2019 08:20:51 -0300 Subject: [PATCH 195/253] Remove annoying vue-dropzone messages --- webapp/components/Upload/index.vue | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/webapp/components/Upload/index.vue b/webapp/components/Upload/index.vue index 5f3ae96f6..f59c86483 100644 --- a/webapp/components/Upload/index.vue +++ b/webapp/components/Upload/index.vue @@ -1,5 +1,5 @@