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 @@
-
+
{{ link.url }}
@@ -44,12 +39,8 @@