diff --git a/.travis.yml b/.travis.yml index 42b427a11..04fc54e60 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,6 +21,9 @@ install: - wait-on http://localhost:7474 script: + - export CYPRESS_RETRIES=1 + - export BRANCH=$(if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then echo $TRAVIS_BRANCH; else echo $TRAVIS_PULL_REQUEST_BRANCH; fi) + - echo "TRAVIS_BRANCH=$TRAVIS_BRANCH, PR=$PR, BRANCH=$BRANCH" # Backend - docker-compose exec backend yarn run lint - docker-compose exec backend yarn run test:jest --ci --verbose=false --coverage @@ -34,7 +37,7 @@ script: - docker-compose exec webapp yarn run test --ci --verbose=false --coverage - docker-compose exec -d backend yarn run test:before:seeder # Fullstack - - CYPRESS_RETRIES=1 yarn run cypress:run + - yarn run cypress:run # Coverage - codecov diff --git a/backend/Dockerfile b/backend/Dockerfile index d24f2747e..f0251bddc 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -24,4 +24,5 @@ RUN yarn run build FROM base as production ENV NODE_ENV=production COPY --from=builder /nitro-backend/dist ./dist +COPY ./public/img/ ./public/img/ RUN yarn install --frozen-lockfile --non-interactive diff --git a/backend/package.json b/backend/package.json index f6cb0de6b..2ec7a1845 100644 --- a/backend/package.json +++ b/backend/package.json @@ -47,12 +47,12 @@ "apollo-client": "~2.6.2", "apollo-link-context": "~1.0.14", "apollo-link-http": "~1.5.14", - "apollo-server": "~2.6.2", + "apollo-server": "~2.6.3", "bcryptjs": "~2.4.3", "cheerio": "~1.0.0-rc.3", "cors": "~2.8.5", "cross-env": "~5.2.0", - "date-fns": "2.0.0-alpha.31", + "date-fns": "2.0.0-alpha.32", "debug": "~4.1.1", "dotenv": "~8.0.0", "express": "~4.17.1", @@ -87,7 +87,7 @@ "@babel/plugin-proposal-throw-expressions": "^7.2.0", "@babel/preset-env": "~7.4.5", "@babel/register": "~7.4.4", - "apollo-server-testing": "~2.6.2", + "apollo-server-testing": "~2.6.3", "babel-core": "~7.0.0-0", "babel-eslint": "~10.0.1", "babel-jest": "~24.8.0", diff --git a/backend/src/middleware/fixImageUrlsMiddleware.js b/backend/src/middleware/fixImageUrlsMiddleware.js index c930915bf..3bfa8537a 100644 --- a/backend/src/middleware/fixImageUrlsMiddleware.js +++ b/backend/src/middleware/fixImageUrlsMiddleware.js @@ -6,8 +6,11 @@ const legacyUrls = [ export const fixUrl = url => { legacyUrls.forEach(legacyUrl => { - url = url.replace(legacyUrl, '/api') + url = url.replace(legacyUrl, '') }) + if (!url.startsWith('/')) { + url = `/${url}` + } return url } diff --git a/backend/src/middleware/fixImageUrlsMiddleware.spec.js b/backend/src/middleware/fixImageUrlsMiddleware.spec.js index b2d808dd9..0da66811a 100644 --- a/backend/src/middleware/fixImageUrlsMiddleware.spec.js +++ b/backend/src/middleware/fixImageUrlsMiddleware.spec.js @@ -1,12 +1,19 @@ import { fixImageURLs } from './fixImageUrlsMiddleware' describe('fixImageURLs', () => { + describe('edge case: image url is exact match of legacy url', () => { + it('replaces it with `/`', () => { + const url = 'https://api-alpha.human-connection.org' + expect(fixImageURLs(url)).toEqual('/') + }) + }) + describe('image url of legacy alpha', () => { it('removes domain', () => { const url = 'https://api-alpha.human-connection.org/uploads/4bfaf9172c4ba03d7645108bbbd16f0a696a37d01eacd025fb131e5da61b15d9.png' expect(fixImageURLs(url)).toEqual( - '/api/uploads/4bfaf9172c4ba03d7645108bbbd16f0a696a37d01eacd025fb131e5da61b15d9.png', + '/uploads/4bfaf9172c4ba03d7645108bbbd16f0a696a37d01eacd025fb131e5da61b15d9.png', ) }) }) @@ -16,7 +23,7 @@ describe('fixImageURLs', () => { const url = 'https://staging-api.human-connection.org/uploads/1b3c39a24f27e2fb62b69074b2f71363b63b263f0c4574047d279967124c026e.jpeg' expect(fixImageURLs(url)).toEqual( - '/api/uploads/1b3c39a24f27e2fb62b69074b2f71363b63b263f0c4574047d279967124c026e.jpeg', + '/uploads/1b3c39a24f27e2fb62b69074b2f71363b63b263f0c4574047d279967124c026e.jpeg', ) }) }) diff --git a/backend/yarn.lock b/backend/yarn.lock index e92070fe9..7aa9f9898 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -1029,10 +1029,10 @@ "@types/express-serve-static-core" "*" "@types/serve-static" "*" -"@types/express@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.16.1.tgz#d756bd1a85c34d87eaf44c888bad27ba8a4b7cf0" - integrity sha512-V0clmJow23WeyblmACoxbHBu2JKlE5TiIme6Lem14FnPW9gsttyHtk6wq7njcdIWH1njAaFgR8gW09lgY98gQg== +"@types/express@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.0.tgz#49eaedb209582a86f12ed9b725160f12d04ef287" + integrity sha512-CjaMu57cjgjuZbh9DpkloeGxV45CnMGlVd+XpG7Gm9QgVrd7KFq+X4HY0vM+2v0bczS48Wg7bvnMY5TN+Xmcfw== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "*" @@ -1363,6 +1363,18 @@ apollo-engine-reporting@1.3.0: async-retry "^1.2.1" graphql-extensions "0.7.2" +apollo-engine-reporting@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/apollo-engine-reporting/-/apollo-engine-reporting-1.3.1.tgz#f2c2c63f865871a57c15cdbb2a3bcd4b4af28115" + integrity sha512-e0Xp+0yite8DH/xm9fnJt42CxfWAcY6waiq3icCMAgO9T7saXzVOPpl84SkuA+hIJUBtfaKrTnC+7Jxi/I7OrQ== + dependencies: + apollo-engine-reporting-protobuf "0.3.1" + apollo-graphql "^0.3.0" + apollo-server-core "2.6.3" + apollo-server-env "2.4.0" + async-retry "^1.2.1" + graphql-extensions "0.7.2" + apollo-env@0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/apollo-env/-/apollo-env-0.5.1.tgz#b9b0195c16feadf0fe9fd5563edb0b9b7d9e97d3" @@ -1457,6 +1469,32 @@ apollo-server-core@2.6.2: subscriptions-transport-ws "^0.9.11" ws "^6.0.0" +apollo-server-core@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.6.3.tgz#786c8251c82cf29acb5cae9635a321f0644332ae" + integrity sha512-tfC0QO1NbJW3ShkB5pRCnUaYEkW2AwnswaTeedkfv//EO3yiC/9LeouCK5F22T8stQG+vGjvCqf0C8ldI/XsIA== + dependencies: + "@apollographql/apollo-tools" "^0.3.6" + "@apollographql/graphql-playground-html" "1.6.20" + "@types/ws" "^6.0.0" + apollo-cache-control "0.7.2" + apollo-datasource "0.5.0" + apollo-engine-reporting "1.3.1" + apollo-server-caching "0.4.0" + apollo-server-env "2.4.0" + apollo-server-errors "2.3.0" + apollo-server-plugin-base "0.5.2" + apollo-tracing "0.7.2" + fast-json-stable-stringify "^2.0.0" + graphql-extensions "0.7.2" + graphql-subscriptions "^1.0.0" + graphql-tag "^2.9.2" + graphql-tools "^4.0.0" + graphql-upload "^8.0.2" + sha.js "^2.4.11" + subscriptions-transport-ws "^0.9.11" + ws "^6.0.0" + apollo-server-core@^1.3.6, apollo-server-core@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-1.4.0.tgz#4faff7f110bfdd6c3f47008302ae24140f94c592" @@ -1479,18 +1517,18 @@ apollo-server-errors@2.3.0: resolved "https://registry.yarnpkg.com/apollo-server-errors/-/apollo-server-errors-2.3.0.tgz#700622b66a16dffcad3b017e4796749814edc061" integrity sha512-rUvzwMo2ZQgzzPh2kcJyfbRSfVKRMhfIlhY7BzUfM4x6ZT0aijlgsf714Ll3Mbf5Fxii32kD0A/DmKsTecpccw== -apollo-server-express@2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-2.6.2.tgz#526297c01a7a32fe9215566f9fd7ff92e82f1fa0" - integrity sha512-nbL3noJ5KxKGg+hT8UsAA7++oHWq/KNSevfdCluWTfUNqH1vYRTvAnARx/6JM06S9zcPTfOLcqwHnDnY9zYFxA== +apollo-server-express@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-2.6.3.tgz#62034c978f84207615c0430fb37ab006f71146fe" + integrity sha512-8ca+VpKArgNzFar0D3DesWnn0g9YDtFLhO56TQprHh2Spxu9WxTnYNjsYs2MCCNf+iV/uy7vTvEknErvnIcZaQ== dependencies: "@apollographql/graphql-playground-html" "1.6.20" "@types/accepts" "^1.3.5" "@types/body-parser" "1.17.0" "@types/cors" "^2.8.4" - "@types/express" "4.16.1" + "@types/express" "4.17.0" accepts "^1.3.5" - apollo-server-core "2.6.2" + apollo-server-core "2.6.3" body-parser "^1.18.3" cors "^2.8.4" graphql-subscriptions "^1.0.0" @@ -1523,20 +1561,20 @@ apollo-server-plugin-base@0.5.2: resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-0.5.2.tgz#f97ba983f1e825fec49cba8ff6a23d00e1901819" integrity sha512-j81CpadRLhxikBYHMh91X4aTxfzFnmmebEiIR9rruS6dywWCxV2aLW87l9ocD1MiueNam0ysdwZkX4F3D4csNw== -apollo-server-testing@~2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/apollo-server-testing/-/apollo-server-testing-2.6.2.tgz#e0ecddd565fce1c38a346f9fbe6118f543ccf6a6" - integrity sha512-I9QLFk4I/z9oOIXfnLc8RPBYAKih6Olrg3RDeRvWhDjLQ8gfALXVhCO+7WuvM35wNZcZVn7aXBeZ8Y3mlgkj8w== +apollo-server-testing@~2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/apollo-server-testing/-/apollo-server-testing-2.6.3.tgz#a0199a5d42000e60ecf0dea44b851f5f581e280e" + integrity sha512-LTkegcGVSkM+pA0FINDSYVl3TiFYKZyfjlKrEr/LN6wLiL6gbRgy6LMtk2j+qli/bnTDqqQREX8OEqmV8FKUoQ== dependencies: - apollo-server-core "2.6.2" + apollo-server-core "2.6.3" -apollo-server@~2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/apollo-server/-/apollo-server-2.6.2.tgz#33fe894b740588f059a7679346516ffce50377d5" - integrity sha512-fMXaAKIb0dX0lzcZ4zlu7ay1L596d9HTNkdn8cKuM7zmTpugZSAL966COguJUDSjUS9CaB1Kh5hl1yRuRqHXSA== +apollo-server@~2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/apollo-server/-/apollo-server-2.6.3.tgz#71235325449c6d3881a5143975ca44c07a07d2d7" + integrity sha512-pTIXE5xEMAikKLTIBIqLNvimMETiZbzmiqDb6BGzIUicAz4Rxa1/+bDi1ZeJWrZQjE/TfBLd2Si3qam7dZGrjw== dependencies: - apollo-server-core "2.6.2" - apollo-server-express "2.6.2" + apollo-server-core "2.6.3" + apollo-server-express "2.6.3" express "^4.0.0" graphql-subscriptions "^1.0.0" graphql-tools "^4.0.0" @@ -2586,10 +2624,10 @@ data-urls@^1.0.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" -date-fns@2.0.0-alpha.31: - version "2.0.0-alpha.31" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.0.0-alpha.31.tgz#51bcfdca25dfc9bea334a556ab33dfc0bb00421c" - integrity sha512-S19PwMqnbYsqcbCg02Yj9gv4veVNZ0OX7v2+zcd+Mq0RI7LoDKJipJjnMrTZ3Cc6blDuTce5G/pHXcVIGRwJWQ== +date-fns@2.0.0-alpha.32: + version "2.0.0-alpha.32" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.0.0-alpha.32.tgz#e36472aac2ff49b199dd7b257807ca1c89bbe603" + integrity sha512-Rv9g3piGxEp10ujgPODgVDfkn1Xz1HDZASEKmGsP/RhU4DCAugdNfnEjE52mvz8G3Ha5XFlQMDEb6Lwryb9Wfg== debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" diff --git a/package.json b/package.json index dd7454c54..61274bcd6 100644 --- a/package.json +++ b/package.json @@ -22,8 +22,8 @@ "codecov": "^3.5.0", "cross-env": "^5.2.0", "cypress": "^3.3.1", - "cypress-cucumber-preprocessor": "^1.11.2", - "cypress-file-upload": "^3.1.2", + "cypress-cucumber-preprocessor": "^1.12.0", + "cypress-file-upload": "^3.1.3", "cypress-plugin-retries": "^1.2.2", "dotenv": "^8.0.0", "faker": "^4.1.0", diff --git a/webapp/components/Avatar/Avatar.spec.js b/webapp/components/Avatar/Avatar.spec.js index ae91fecfe..d3ebcb030 100644 --- a/webapp/components/Avatar/Avatar.spec.js +++ b/webapp/components/Avatar/Avatar.spec.js @@ -1,9 +1,11 @@ import { mount, createLocalVue } from '@vue/test-utils' import Styleguide from '@human-connection/styleguide' import Avatar from './Avatar.vue' +import Filters from '~/plugins/vue-filters' const localVue = createLocalVue() localVue.use(Styleguide) +localVue.use(Filters) describe('Avatar.vue', () => { let propsData = {} diff --git a/webapp/components/Avatar/Avatar.vue b/webapp/components/Avatar/Avatar.vue index 0d997c745..ec2f9b28b 100644 --- a/webapp/components/Avatar/Avatar.vue +++ b/webapp/components/Avatar/Avatar.vue @@ -1,5 +1,10 @@ diff --git a/webapp/components/Image/spec.js b/webapp/components/Image/spec.js deleted file mode 100644 index be568964a..000000000 --- a/webapp/components/Image/spec.js +++ /dev/null @@ -1,39 +0,0 @@ -import { shallowMount } from '@vue/test-utils' -import Image from '.' - -describe('Image', () => { - let propsData = { imageProps: { class: 'hc-badge', src: '' } } - - const Wrapper = () => { - return shallowMount(Image, { propsData }) - } - - it('renders', () => { - expect(Wrapper().is('img')).toBe(true) - }) - - it('passes properties down to `img`', () => { - expect(Wrapper().classes()).toEqual(['hc-badge']) - }) - - describe('given a relative `src`', () => { - beforeEach(() => { - propsData.imageProps.src = '/img/badges/fundraisingbox_de_airship.svg' - }) - - it('adds a prefix to load the image from the backend', () => { - expect(Wrapper().attributes('src')).toBe('/api/img/badges/fundraisingbox_de_airship.svg') - }) - }) - - describe('given an absolute `src`', () => { - beforeEach(() => { - propsData.imageProps.src = 'http://lorempixel.com/640/480/animals' - }) - - it('keeps the URL as is', () => { - // e.g. our seeds have absolute image URLs - expect(Wrapper().attributes('src')).toBe('http://lorempixel.com/640/480/animals') - }) - }) -}) diff --git a/webapp/components/Password/Change.spec.js b/webapp/components/Password/Change.spec.js index cffe86466..a15695a55 100644 --- a/webapp/components/Password/Change.spec.js +++ b/webapp/components/Password/Change.spec.js @@ -1,10 +1,12 @@ import { mount, createLocalVue } from '@vue/test-utils' import ChangePassword from './Change.vue' import Styleguide from '@human-connection/styleguide' +import Filters from '~/plugins/vue-filters' const localVue = createLocalVue() localVue.use(Styleguide) +localVue.use(Filters) describe('ChangePassword.vue', () => { let mocks diff --git a/webapp/components/User/spec.js b/webapp/components/User/spec.js index 56bdc10f1..312615a5b 100644 --- a/webapp/components/User/spec.js +++ b/webapp/components/User/spec.js @@ -2,6 +2,7 @@ import { mount, createLocalVue, RouterLinkStub } from '@vue/test-utils' import User from './index' import Vuex from 'vuex' import VTooltip from 'v-tooltip' +import Filters from '~/plugins/vue-filters' import Styleguide from '@human-connection/styleguide' @@ -11,6 +12,7 @@ const filter = jest.fn(str => str) localVue.use(Vuex) localVue.use(VTooltip) localVue.use(Styleguide) +localVue.use(Filters) localVue.filter('truncate', filter) diff --git a/webapp/components/comments/CommentList/CommentList.spec.js b/webapp/components/comments/CommentList/CommentList.spec.js index c20ec069f..b15e4f7d6 100644 --- a/webapp/components/comments/CommentList/CommentList.spec.js +++ b/webapp/components/comments/CommentList/CommentList.spec.js @@ -3,11 +3,13 @@ import CommentList from '.' import Empty from '~/components/Empty' import Vuex from 'vuex' import Styleguide from '@human-connection/styleguide' +import Filters from '~/plugins/vue-filters' const localVue = createLocalVue() localVue.use(Styleguide) localVue.use(Vuex) +localVue.use(Filters) localVue.filter('truncate', string => string) config.stubs['v-popover'] = '' diff --git a/webapp/package.json b/webapp/package.json index aa26eedb6..b5c74de99 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -59,7 +59,7 @@ "apollo-client": "~2.6.2", "cookie-universal-nuxt": "~2.0.16", "cross-env": "~5.2.0", - "date-fns": "2.0.0-alpha.31", + "date-fns": "2.0.0-alpha.33", "express": "~4.17.1", "graphql": "~14.3.1", "jsonwebtoken": "~8.5.1", diff --git a/webapp/pages/profile/_id/_slug.spec.js b/webapp/pages/profile/_id/_slug.spec.js index c9faafffc..3c5a1b063 100644 --- a/webapp/pages/profile/_id/_slug.spec.js +++ b/webapp/pages/profile/_id/_slug.spec.js @@ -1,17 +1,24 @@ -import { config, mount } from '@vue/test-utils' -import HcUserProfile from './_slug.vue' +import { config, mount, createLocalVue } from '@vue/test-utils' +import ProfileSlug from './_slug.vue' import Vuex from 'vuex' -import Vue from 'vue' +import Styleguide from '@human-connection/styleguide' +import Filters from '~/plugins/vue-filters' -config.stubs['ds-space'] = '
Hello, Wolle
' +const localVue = createLocalVue() -Vue.use(Vuex) +localVue.use(Vuex) +localVue.use(Styleguide) +localVue.use(Filters) +localVue.filter('date', d => d) + +config.stubs['no-ssr'] = '' +config.stubs['v-popover'] = '' +config.stubs['nuxt-link'] = '' describe('ProfileSlug', () => { let wrapper let Wrapper let mocks - let getters beforeEach(() => { mocks = { @@ -19,8 +26,8 @@ describe('ProfileSlug', () => { id: 'p23', name: 'It is a post', }, - $t: jest.fn(), - // If you mocking router, than don't use VueRouter with lacalVue: https://vue-test-utils.vuejs.org/guides/using-with-vue-router.html + $t: jest.fn(t => t), + // If you mocking router, than don't use VueRouter with localVue: https://vue-test-utils.vuejs.org/guides/using-with-vue-router.html $route: { params: { id: '4711', @@ -37,45 +44,138 @@ describe('ProfileSlug', () => { error: jest.fn(), }, $apollo: { + loading: false, mutate: jest.fn().mockResolvedValue(), }, } - getters = { - 'auth/user': () => { - return { - slug: 'john-doe', - id: '4711', - } - }, - } }) describe('mount', () => { Wrapper = () => { - const store = new Vuex.Store({ - getters, - }) - return mount(HcUserProfile, { - store, + return mount(ProfileSlug, { mocks, + localVue, }) } - beforeEach(jest.useFakeTimers) - - describe('test "PostHelpers"', () => { + describe('given an authenticated user', () => { beforeEach(() => { - wrapper = Wrapper() + mocks.$filters = { + removeLinks: c => c, + truncate: a => a, + } + mocks.$store = { + getters: { + 'auth/user': { + id: 'u23', + }, + }, + } }) - describe('deletion of Post from List by invoking "deletePostCallback(`list`)"', () => { - beforeEach(() => {}) + describe('given a user for the profile', () => { + beforeEach(() => { + wrapper = Wrapper() + wrapper.setData({ + User: [ + { + id: 'u3', + name: 'Bob the builder', + contributionsCount: 6, + shoutedCount: 7, + commentedCount: 8, + }, + ], + }) + }) - describe('after timeout', () => { - beforeEach(jest.runAllTimers) + it('displays name of the user', () => { + expect(wrapper.text()).toContain('Bob the builder') + }) - it('fetches the user', () => { - expect(wrapper.is('div')).toBe(true) + describe('load more button', () => { + const aPost = { + title: 'I am a post', + content: 'This is my content', + contentExcerpt: 'This is my content', + } + + describe('currently no posts available (e.g. after tab switching)', () => { + beforeEach(() => { + wrapper.setData({ + Post: null, + }) + }) + + it('displays no "load more" button', () => { + expect(wrapper.find('.load-more').exists()).toBe(false) + }) + + describe('apollo client in `loading` state', () => { + beforeEach(() => { + wrapper.vm.$apollo.loading = true + }) + + it('never displays more than one loading spinner', () => { + expect(wrapper.findAll('.ds-spinner')).toHaveLength(1) + }) + + it('displays a loading spinner below the posts list', () => { + expect(wrapper.find('.user-profile-posts-list .ds-spinner').exists()).toBe(true) + }) + }) + }) + + describe('pagination returned less posts than available', () => { + beforeEach(() => { + const posts = [1, 2, 3, 4, 5].map(id => { + return { + ...aPost, + id, + } + }) + + wrapper.setData({ + Post: posts, + }) + }) + + it('displays a "load more" button', () => { + expect(wrapper.find('.load-more').exists()).toBe(true) + }) + + describe('apollo client in `loading` state', () => { + beforeEach(() => { + wrapper.vm.$apollo.loading = true + }) + + it('never displays more than one loading spinner', () => { + expect(wrapper.findAll('.ds-spinner')).toHaveLength(1) + }) + + it('displays a loading spinner below the posts list', () => { + expect(wrapper.find('.load-more .ds-spinner').exists()).toBe(true) + }) + }) + }) + + describe('pagination returned as many posts as available', () => { + beforeEach(() => { + const posts = [1, 2, 3, 4, 5, 6].map(id => { + return { + ...aPost, + id, + } + }) + + wrapper.setData({ + Post: posts, + }) + }) + + it('displays no "load more" button', () => { + expect(wrapper.find('.load-more').exists()).toBe(false) + }) }) }) }) diff --git a/webapp/pages/settings/my-social-media.spec.js b/webapp/pages/settings/my-social-media.spec.js index 34793e066..55ba27bb8 100644 --- a/webapp/pages/settings/my-social-media.spec.js +++ b/webapp/pages/settings/my-social-media.spec.js @@ -2,11 +2,13 @@ import { mount, createLocalVue } from '@vue/test-utils' import MySocialMedia from './my-social-media.vue' import Vuex from 'vuex' import Styleguide from '@human-connection/styleguide' +import Filters from '~/plugins/vue-filters' const localVue = createLocalVue() localVue.use(Vuex) localVue.use(Styleguide) +localVue.use(Filters) describe('my-social-media.vue', () => { let wrapper diff --git a/webapp/pages/settings/my-social-media.vue b/webapp/pages/settings/my-social-media.vue index b53df6170..948e77407 100644 --- a/webapp/pages/settings/my-social-media.vue +++ b/webapp/pages/settings/my-social-media.vue @@ -4,12 +4,7 @@ - + Social Media link {{ link.url }}    @@ -44,12 +39,8 @@