diff --git a/cypress/integration/common/steps.js b/cypress/integration/common/steps.js
index 387f33ac0..8f5bcc8ea 100644
--- a/cypress/integration/common/steps.js
+++ b/cypress/integration/common/steps.js
@@ -230,7 +230,7 @@ When('I type in the following text:', text => {
Then('the post shows up on the landing page at position {int}', index => {
cy.openPage('landing')
- const selector = `:nth-child(${index}) > .ds-card > .ds-card-content`
+ const selector = `.post-card:nth-child(${index}) > .ds-card-content`
cy.get(selector).should('contain', lastPost.title)
cy.get(selector).should('contain', lastPost.content)
})
diff --git a/webapp/components/FilterMenu/FilterMenu.spec.js b/webapp/components/FilterMenu/FilterMenu.spec.js
new file mode 100644
index 000000000..c312a401b
--- /dev/null
+++ b/webapp/components/FilterMenu/FilterMenu.spec.js
@@ -0,0 +1,54 @@
+import { mount, createLocalVue } from '@vue/test-utils'
+import FilterMenu from './FilterMenu.vue'
+import Styleguide from '@human-connection/styleguide'
+
+const localVue = createLocalVue()
+
+localVue.use(Styleguide)
+
+describe('FilterMenu.vue', () => {
+ let wrapper
+ let mocks
+
+ const createWrapper = mountMethod => {
+ return mountMethod(FilterMenu, {
+ mocks,
+ localVue,
+ })
+ }
+
+ beforeEach(() => {
+ mocks = { $t: () => {} }
+ })
+
+ describe('mount', () => {
+ beforeEach(() => {
+ wrapper = createWrapper(mount)
+ })
+
+ it('renders a card', () => {
+ expect(wrapper.is('.ds-card')).toBe(true)
+ })
+
+ describe('click "filter-by-followed-authors-only" button', () => {
+ it('emits filterBubble object', () => {
+ wrapper.find({ name: 'filter-by-followed-authors-only' }).trigger('click')
+ expect(wrapper.emitted('changeFilterBubble')).toBeTruthy()
+ })
+
+ it('toggles filterBubble.author property', () => {
+ wrapper.find({ name: 'filter-by-followed-authors-only' }).trigger('click')
+ expect(wrapper.emitted('changeFilterBubble')[0]).toEqual([{ author: 'following' }])
+ wrapper.find({ name: 'filter-by-followed-authors-only' }).trigger('click')
+ expect(wrapper.emitted('changeFilterBubble')[1]).toEqual([{ author: 'all' }])
+ })
+
+ it('makes button primary', () => {
+ wrapper.find({ name: 'filter-by-followed-authors-only' }).trigger('click')
+ expect(
+ wrapper.find({ name: 'filter-by-followed-authors-only' }).classes('ds-button-primary'),
+ ).toBe(true)
+ })
+ })
+ })
+})
diff --git a/webapp/components/FilterMenu/FilterMenu.vue b/webapp/components/FilterMenu/FilterMenu.vue
new file mode 100644
index 000000000..a2195a5fd
--- /dev/null
+++ b/webapp/components/FilterMenu/FilterMenu.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/webapp/locales/de.json b/webapp/locales/de.json
index 909659366..a790e6461 100644
--- a/webapp/locales/de.json
+++ b/webapp/locales/de.json
@@ -1,4 +1,7 @@
{
+ "filter-menu": {
+ "title": "Deine Filterblase"
+ },
"login": {
"copy": "Wenn Du bereits ein Konto bei Human Connection hast, melde Dich bitte hier an.",
"login": "Einloggen",
diff --git a/webapp/locales/en.json b/webapp/locales/en.json
index bd517a7ce..289928f92 100644
--- a/webapp/locales/en.json
+++ b/webapp/locales/en.json
@@ -1,4 +1,7 @@
{
+ "filter-menu": {
+ "title": "Your filter bubble"
+ },
"login": {
"copy": "If you already have a human-connection account, login here.",
"login": "Login",
diff --git a/webapp/pages/index.vue b/webapp/pages/index.vue
index a45a99656..d8becf206 100644
--- a/webapp/pages/index.vue
+++ b/webapp/pages/index.vue
@@ -1,6 +1,9 @@
-
+
+
+
+