From f06369ad7cd6d85a8276e978430dbf36101ba600 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 27 Jun 2023 12:52:18 +0200 Subject: [PATCH 001/202] =?UTF-8?q?Setup=20displaying=20events=20on=20map?= =?UTF-8?q?=20=E2=80=93=20first=20step?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- webapp/pages/map.vue | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/webapp/pages/map.vue b/webapp/pages/map.vue index 1a34cbda1..e6c0950a6 100644 --- a/webapp/pages/map.vue +++ b/webapp/pages/map.vue @@ -66,6 +66,7 @@ import '@mapbox/mapbox-gl-geocoder/dist/mapbox-gl-geocoder.css' import { mapGetters } from 'vuex' import { profileUserQuery, mapUserQuery } from '~/graphql/User' import { groupQuery } from '~/graphql/groups' +import { filterPosts } from '~/graphql/PostQuery.js' import mobile from '~/mixins/mobile' import Empty from '~/components/Empty/Empty' import MapStylesButtons from '~/components/Map/MapStylesButtons' @@ -95,6 +96,7 @@ export default { currentUserCoordinates: null, users: null, groups: null, + posts: null, markers: { icons: [ { @@ -483,6 +485,29 @@ export default { }, fetchPolicy: 'cache-and-network', }, + Post: { + query() { + return filterPosts(this.$i18n) + }, + variables() { + return { + // Wolle: postType: 'Event', + filter: { + postType_in: ['Event'], + eventLocation: true, + eventStart_gte: new Date(), + }, + // Wolle first: this.pageSize, + // Wolle orderBy: ['pinned_asc', this.orderBy], + // Wolle offset: 0, + } + }, + update({ Post }) { + this.posts = Post + console.log('this.posts: ', this.posts) + }, + fetchPolicy: 'cache-and-network', + }, }, } From f247e6bd7b7554442493b799780186b916890043 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 27 Jun 2023 12:53:47 +0200 Subject: [PATCH 002/202] Try to filter only for events with location --- backend/src/schema/resolvers/posts.ts | 9 +++++++-- backend/src/schema/types/type/Location.gql | 8 +++++++- backend/src/schema/types/type/Post.gql | 6 ++++-- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/backend/src/schema/resolvers/posts.ts b/backend/src/schema/resolvers/posts.ts index 0bd4507b5..c4d695e88 100644 --- a/backend/src/schema/resolvers/posts.ts +++ b/backend/src/schema/resolvers/posts.ts @@ -1,6 +1,6 @@ import { v4 as uuid } from 'uuid' import { neo4jgraphql } from 'neo4j-graphql-js' -import { isEmpty } from 'lodash' +import { isEmpty, cloneDeep } from 'lodash' import { UserInputError } from 'apollo-server' import { mergeImage, deleteImage } from './images/images' import Resolver from './helpers/Resolver' @@ -12,12 +12,15 @@ import { createOrUpdateLocations } from './users/location' import CONFIG from '../../config' const maintainPinnedPosts = (params) => { + const filter = cloneDeep(params.filter) const pinnedPostFilter = { pinned: true } if (isEmpty(params.filter)) { params.filter = { OR: [pinnedPostFilter, {}] } } else { - params.filter = { OR: [pinnedPostFilter, { ...params.filter }] } + console.log('maintainPinnedPosts before: ', {...filter}) + params.filter = { OR: [pinnedPostFilter, { ...filter }] } } + console.log('maintainPinnedPosts after: ', {...filter}) return params } @@ -38,6 +41,8 @@ export default { params = await filterForMutedUsers(params, context) params = filterEventDates(params) params = await maintainPinnedPosts(params) + console.log('maintainPinnedPosts filter.OR[1].eventLocation: ', params.filter.OR[1].eventLocation) + console.log('maintainPinnedPosts filter: ', params.filter) return neo4jgraphql(object, params, context, resolveInfo) }, profilePagePosts: async (object, params, context, resolveInfo) => { diff --git a/backend/src/schema/types/type/Location.gql b/backend/src/schema/types/type/Location.gql index fad24cc26..96e2479d2 100644 --- a/backend/src/schema/types/type/Location.gql +++ b/backend/src/schema/types/type/Location.gql @@ -1,3 +1,10 @@ +input _LocationFilter { + NOT: _LocationFilter + id: ID + id_not: ID + name: String +} + type Location { id: ID! name: String! @@ -25,4 +32,3 @@ type LocationMapBox { type Query { queryLocations(place: String!, lang: String!): [LocationMapBox]! } - diff --git a/backend/src/schema/types/type/Post.gql b/backend/src/schema/types/type/Post.gql index 0a7277515..41525f47e 100644 --- a/backend/src/schema/types/type/Post.gql +++ b/backend/src/schema/types/type/Post.gql @@ -84,8 +84,10 @@ input _PostFilter { group: _GroupFilter postsInMyGroups: Boolean postType_in: [PostType] - eventStart_gte: String - eventEnd_gte: String + eventLocation_not: _LocationFilter + eventLocation: _LocationFilter + eventStart_gte: String + eventEnd_gte: String } enum _PostOrdering { From ee359309d9e04f7bade9bde24cc57314aa9a90ef Mon Sep 17 00:00:00 2001 From: Markus Date: Sat, 8 Jul 2023 16:12:16 +0200 Subject: [PATCH 003/202] [feature] added i18n for chat component --- webapp/components/Chat/Chat.vue | 24 ++++++++++++------------ webapp/locales/de.json | 14 ++++++++++++++ webapp/locales/en.json | 14 ++++++++++++++ 3 files changed, 40 insertions(+), 12 deletions(-) diff --git a/webapp/components/Chat/Chat.vue b/webapp/components/Chat/Chat.vue index c2b02c0af..5bdac4768 100644 --- a/webapp/components/Chat/Chat.vue +++ b/webapp/components/Chat/Chat.vue @@ -79,18 +79,18 @@ export default { }, ], textMessages: { - ROOMS_EMPTY: 'Aucune conversation', - ROOM_EMPTY: 'Aucune conversation sélectionnée', - NEW_MESSAGES: 'Nouveaux messages', - MESSAGE_DELETED: 'Ce message a été supprimé', - MESSAGES_EMPTY: 'Aucun message', - CONVERSATION_STARTED: 'La conversation a commencée le :', - TYPE_MESSAGE: 'Tapez votre message', - SEARCH: 'Rechercher', - IS_ONLINE: 'est en ligne', - LAST_SEEN: 'dernière connexion ', - IS_TYPING: 'est en train de taper...', - CANCEL_SELECT_MESSAGE: 'Annuler Sélection', + ROOMS_EMPTY: this.$t('chat.roomsEmpty'), + ROOM_EMPTY: this.$t('chat.roomEmpty'), + NEW_MESSAGES: this.$t('chat.newMessages'), + MESSAGE_DELETED: this.$t('chat.messageDeleted'), + MESSAGES_EMPTY: this.$t('chat.messagesEmpty'), + CONVERSATION_STARTED: this.$t('chat.conversationStarted'), + TYPE_MESSAGE: this.$t('chat.typeMessage'), + SEARCH: this.$t('chat.search'), + IS_ONLINE: this.$t('chat.isOnline'), + LAST_SEEN: this.$t('chat.lastSeen'), + IS_TYPING: this.$t('chat.isTyping'), + CANCEL_SELECT_MESSAGE: this.$t('chat.cancelSelectMessage') }, roomActions: [ { diff --git a/webapp/locales/de.json b/webapp/locales/de.json index febb8898c..c482cfff9 100644 --- a/webapp/locales/de.json +++ b/webapp/locales/de.json @@ -77,6 +77,20 @@ } } }, + "chat": { + "roomsEmpty" : "Keine Räume", + "roomEmpty" : "Keinen Raum selektiert", + "newMessages" : "Neue Nachrichten", + "messageDeleted": "Diese Nachricht wuerde gelöscht", + "messagesEmpty": "Keine Nachrichten", + "conversationStarted": "Unterhaltung startete am:", + "typeMessage": "Nachricht schreiben", + "search": "Suche", + "isOnline": "online", + "lastSeen": "zuletzt gesehen ", + "isTyping": "tippt...", + "cancelSelectMessage": "Abbrechen" + }, "client-only": { "loading": "Lade …" }, diff --git a/webapp/locales/en.json b/webapp/locales/en.json index c0fb5c2f6..0e71a2f4f 100644 --- a/webapp/locales/en.json +++ b/webapp/locales/en.json @@ -77,6 +77,20 @@ } } }, + "chat": { + "roomsEmpty" : "No rooms", + "roomEmpty" : "No room selected", + "newMessages" : "New Messages", + "messageDeleted": "This message was deleted", + "messagesEmpty": "No messages", + "conversationStarted": "Conversation started on:", + "typeMessage": "Type message", + "search": "Search", + "isOnline": "is online", + "lastSeen": "last seen ", + "isTyping": "is writing...", + "cancelSelectMessage": "Cancel" + }, "client-only": { "loading": "Loading …" }, From 59828c25d26bd9d9bcdd9d057a970ea81439a70a Mon Sep 17 00:00:00 2001 From: Markus Date: Sat, 8 Jul 2023 16:29:22 +0200 Subject: [PATCH 004/202] [feature] added basic custom styling for chat --- webapp/assets/_new/styles/tokens.scss | 7 +- webapp/components/Chat/Chat.vue | 8 + webapp/constants/chat.js | 302 ++++++++++++++++++++++++++ 3 files changed, 316 insertions(+), 1 deletion(-) create mode 100644 webapp/constants/chat.js diff --git a/webapp/assets/_new/styles/tokens.scss b/webapp/assets/_new/styles/tokens.scss index 22e0214ff..4fd8fd055 100644 --- a/webapp/assets/_new/styles/tokens.scss +++ b/webapp/assets/_new/styles/tokens.scss @@ -406,4 +406,9 @@ $color-toast-green: $color-success; $color-ribbon-event: $background-color-third; $color-ribbon-event-active: $background-color-third-active; $color-ribbon-article: $background-color-secondary; -$color-ribbon-article-active: $background-color-secondary-active; \ No newline at end of file +$color-ribbon-article-active: $background-color-secondary-active; + + +:export { + colorYellow: $color-yellow; +} \ No newline at end of file diff --git a/webapp/components/Chat/Chat.vue b/webapp/components/Chat/Chat.vue index 5bdac4768..cb5922660 100644 --- a/webapp/components/Chat/Chat.vue +++ b/webapp/components/Chat/Chat.vue @@ -15,6 +15,7 @@ :rooms-loaded="true" show-files="false" show-audio="false" + :styles="JSON.stringify(computedChatStyle)" :show-footer="true" @send-message="sendMessage($event.detail[0])" @fetch-messages="fetchMessages($event.detail[0])" @@ -29,6 +30,7 @@ From f44dda41279e23d90b316652c1f6fbc059281119 Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 11 Jul 2023 10:30:20 +0200 Subject: [PATCH 018/202] fix file path --- .../I_should_be_able_to_change_my_profile_picture.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cypress/support/step_definitions/UserProfile.Avatar/I_should_be_able_to_change_my_profile_picture.js b/cypress/support/step_definitions/UserProfile.Avatar/I_should_be_able_to_change_my_profile_picture.js index d01939cc6..da8eb2e54 100644 --- a/cypress/support/step_definitions/UserProfile.Avatar/I_should_be_able_to_change_my_profile_picture.js +++ b/cypress/support/step_definitions/UserProfile.Avatar/I_should_be_able_to_change_my_profile_picture.js @@ -5,7 +5,7 @@ Then("I should be able to change my profile picture", () => { cy.fixture(avatarUpload, "base64").then(fileContent => { cy.get("#customdropzone").selectFile( - { contents: `../../../fixtures/${avatarUpload}`, fileName: avatarUpload, mimeType: "image/png" }, + { contents: `cypress/fixtures/${avatarUpload}`, fileName: avatarUpload, mimeType: "image/png" }, { action: "drag-drop" } ); }); From 242619d21ba25e3b439d49f2a6d6c23acf3bd952 Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 11 Jul 2023 11:19:47 +0200 Subject: [PATCH 019/202] remove unnecessary cypress code from step definitions --- ...ould_be_able_to_{string}_a_teaser_image.js | 24 +++++++++---------- ...ld_be_able_to_change_my_profile_picture.js | 12 ++++------ 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/cypress/support/step_definitions/Post.Images/I_should_be_able_to_{string}_a_teaser_image.js b/cypress/support/step_definitions/Post.Images/I_should_be_able_to_{string}_a_teaser_image.js index 55a728482..b57335554 100644 --- a/cypress/support/step_definitions/Post.Images/I_should_be_able_to_{string}_a_teaser_image.js +++ b/cypress/support/step_definitions/Post.Images/I_should_be_able_to_{string}_a_teaser_image.js @@ -1,24 +1,24 @@ import { Then } from "@badeball/cypress-cucumber-preprocessor"; Then("I should be able to {string} a teaser image", condition => { + let postTeaserImage = "" + switch(condition){ case "change": + postTeaserImage = "humanconnection.png" cy.get(".delete-image-button") .click() - cy.fixture("humanconnection.png").as("postTeaserImage").then(function() { - cy.get("#postdropzone").selectFile( - { contents: this.postTeaserImage, fileName: "humanconnection.png", mimeType: "image/png" }, - { action: "drag-drop" } - ).wait(750); - }) + cy.get("#postdropzone").selectFile( + { contents: `cypress/fixtures/${postTeaserImage}`, fileName: postTeaserImage, mimeType: "image/png" }, + { action: "drag-drop" } + ).wait(750); break; case "add": - cy.fixture("onourjourney.png").as("postTeaserImage").then(function() { - cy.get("#postdropzone").selectFile( - { contents: this.postTeaserImage, fileName: "onourjourney.png", mimeType: "image/png" }, - { action: "drag-drop" } - ).wait(750); - }) + postTeaserImage = "onourjourney.png" + cy.get("#postdropzone").selectFile( + { contents: `cypress/fixtures/${this.postTeaserImage}`, fileName: postTeaserImage, mimeType: "image/png" }, + { action: "drag-drop" } + ).wait(750); break; case "remove": cy.get(".delete-image-button") diff --git a/cypress/support/step_definitions/UserProfile.Avatar/I_should_be_able_to_change_my_profile_picture.js b/cypress/support/step_definitions/UserProfile.Avatar/I_should_be_able_to_change_my_profile_picture.js index da8eb2e54..b1b2401e2 100644 --- a/cypress/support/step_definitions/UserProfile.Avatar/I_should_be_able_to_change_my_profile_picture.js +++ b/cypress/support/step_definitions/UserProfile.Avatar/I_should_be_able_to_change_my_profile_picture.js @@ -2,13 +2,11 @@ import { Then } from "@badeball/cypress-cucumber-preprocessor"; Then("I should be able to change my profile picture", () => { const avatarUpload = "onourjourney.png"; - - cy.fixture(avatarUpload, "base64").then(fileContent => { - cy.get("#customdropzone").selectFile( - { contents: `cypress/fixtures/${avatarUpload}`, fileName: avatarUpload, mimeType: "image/png" }, - { action: "drag-drop" } - ); - }); + + cy.get("#customdropzone").selectFile( + { contents: `cypress/fixtures/${avatarUpload}`, fileName: avatarUpload, mimeType: "image/png" }, + { action: "drag-drop" } + ); cy.get(".profile-page-avatar img") .should("have.attr", "src") .and("contains", "onourjourney"); From 91b2961562a780fcf7dc24231de3246cb427e64a Mon Sep 17 00:00:00 2001 From: Markus Date: Tue, 11 Jul 2023 11:31:00 +0200 Subject: [PATCH 020/202] [feature] adjusted avatar style for chat if no image is available --- webapp/components/Chat/Chat.vue | 51 +++++++++++++++++++++++++++++++++ webapp/layouts/default.vue | 1 - 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/webapp/components/Chat/Chat.vue b/webapp/components/Chat/Chat.vue index ce4d869ee..2f39afd07 100644 --- a/webapp/components/Chat/Chat.vue +++ b/webapp/components/Chat/Chat.vue @@ -28,6 +28,28 @@ + +
+
+
+ {{ getInitialsName(selectedRoom.roomName) }} +
+
+ +
+
+
+ {{ getInitialsName(room.roomName) }} +
+
@@ -122,6 +144,7 @@ export default { showDemoOptions: true, responsiveBreakpoint: 600, singleRoom: !!this.singleRoomId || false, + selectedRoom: null, } }, mounted() { @@ -174,6 +197,8 @@ export default { this.$toast.error(error.message) } this.messagesLoaded = true + + this.selectedRoom = room }) }, @@ -195,6 +220,11 @@ export default { } this.refetchMessage(message.roomId) }, + + getInitialsName(fullname){ + if(!fullname) return + return fullname.match(/\b\w/g).join('').substring(0, 3).toUpperCase() + } }, apollo: { Rooms: { @@ -235,4 +265,25 @@ export default { body { font-family: 'Quicksand', sans-serif; } +.vac-avatar { + background-size: cover; + background-position: center center; + background-repeat: no-repeat; + background-color: $color-primary-dark; + color: $text-color-primary-inverse; + height: 42px; + width: 42px; + min-height: 42px; + min-width: 42px; + margin-right: 15px; + border-radius: 50%; + position: relative; + + > .initials{ + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } +} diff --git a/webapp/layouts/default.vue b/webapp/layouts/default.vue index 39a84bf14..0e7420956 100644 --- a/webapp/layouts/default.vue +++ b/webapp/layouts/default.vue @@ -19,7 +19,6 @@
- > From 11afa1f6d54e98b600cd864d3011c8035f0c490e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 11 Jul 2023 12:14:21 +0200 Subject: [PATCH 024/202] Simplify the map legend --- webapp/pages/map.vue | 85 ++++++++++++++++++++++---------------------- 1 file changed, 43 insertions(+), 42 deletions(-) diff --git a/webapp/pages/map.vue b/webapp/pages/map.vue index 5bb800ba8..8fffad1cf 100644 --- a/webapp/pages/map.vue +++ b/webapp/pages/map.vue @@ -5,33 +5,15 @@ {{ $t('map.pageTitle') }}
- - {{ $t('map.legend.theUser') }} -    - - {{ $t('map.legend.user') }} -    - - {{ $t('map.legend.group') }} -    - - {{ $t('map.legend.event') }} + + + {{ $t('map.legend.' + type.id) }} +    +
@@ -115,22 +97,38 @@ export default { groups: null, posts: null, markers: { - icons: [ + types: [ { - id: 'marker-blue', - name: 'mapbox-marker-icon-20px-blue.png', + id: 'theUser', + icon: { + id: 'marker-orange', + legendName: 'mapbox-marker-icon-orange.svg', + mapName: 'mapbox-marker-icon-20px-orange.png', + }, }, { - id: 'marker-green', - name: 'mapbox-marker-icon-20px-green.png', + id: 'user', + icon: { + id: 'marker-green', + legendName: 'mapbox-marker-icon-green.svg', + mapName: 'mapbox-marker-icon-20px-green.png', + }, }, { - id: 'marker-orange', - name: 'mapbox-marker-icon-20px-orange.png', + id: 'group', + icon: { + id: 'marker-blue', + legendName: 'mapbox-marker-icon-blue.svg', + mapName: 'mapbox-marker-icon-20px-blue.png', + }, }, { - id: 'marker-purple', - name: 'mapbox-marker-icon-20px-purple.png', + id: 'event', + icon: { + id: 'marker-purple', + legendName: 'mapbox-marker-icon-purple.svg', + mapName: 'mapbox-marker-icon-20px-purple.png', + }, }, ], isImagesLoaded: false, @@ -339,15 +337,18 @@ export default { }, loadMarkersIconsAndAddMarkers() { Promise.all( - this.markers.icons.map( + this.markers.types.map( (marker) => new Promise((resolve, reject) => { // our images have to be in the 'static/img/*' folder otherwise they are not reachable via URL - this.map.loadImage('img/mapbox/marker-icons/' + marker.name, (error, image) => { - if (error) throw error - this.map.addImage(marker.id, image) - resolve() - }) + this.map.loadImage( + 'img/mapbox/marker-icons/' + marker.icon.mapName, + (error, image) => { + if (error) throw error + this.map.addImage(marker.icon.id, image) + resolve() + }, + ) }), ), ).then(() => { From f217c1d63c2eb10f6f77ac71f9f5f7c9b8397235 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 11 Jul 2023 12:22:07 +0200 Subject: [PATCH 025/202] Replace `properties.about` by `properties.description` on map --- webapp/pages/map.vue | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/webapp/pages/map.vue b/webapp/pages/map.vue index 8fffad1cf..1db2b189a 100644 --- a/webapp/pages/map.vue +++ b/webapp/pages/map.vue @@ -290,11 +290,11 @@ export default { ` description += - e.features[0].properties.about && e.features[0].properties.about.length > 0 + e.features[0].properties.description && e.features[0].properties.description.length > 0 ? `
- ${e.features[0].properties.about} + ${e.features[0].properties.description}
` : '' @@ -372,7 +372,7 @@ export default { id: user.id, slug: user.slug, name: user.name, - about: user.about ? user.about : undefined, + description: user.about ? user.about : undefined, }, geometry: { type: 'Point', @@ -392,7 +392,7 @@ export default { id: this.currentUser.id, slug: this.currentUser.slug, name: this.currentUser.name, - about: this.currentUser.about ? this.currentUser.about : undefined, + description: this.currentUser.about ? this.currentUser.about : undefined, }, geometry: { type: 'Point', @@ -412,7 +412,7 @@ export default { id: group.id, slug: group.slug, name: group.name, - about: group.about ? group.about : undefined, + description: group.about ? group.about : undefined, }, geometry: { type: 'Point', @@ -433,7 +433,7 @@ export default { id: post.id, slug: post.slug, name: post.title, - about: post.contentExcerpt, + description: post.contentExcerpt, }, geometry: { type: 'Point', From 5b73dc8e5849a340e8df740ba2308cfc2b1cdbf3 Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 11 Jul 2023 12:33:54 +0200 Subject: [PATCH 026/202] fix typo --- .../Post.Images/I_should_be_able_to_{string}_a_teaser_image.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cypress/support/step_definitions/Post.Images/I_should_be_able_to_{string}_a_teaser_image.js b/cypress/support/step_definitions/Post.Images/I_should_be_able_to_{string}_a_teaser_image.js index b57335554..75d1e352d 100644 --- a/cypress/support/step_definitions/Post.Images/I_should_be_able_to_{string}_a_teaser_image.js +++ b/cypress/support/step_definitions/Post.Images/I_should_be_able_to_{string}_a_teaser_image.js @@ -16,7 +16,7 @@ Then("I should be able to {string} a teaser image", condition => { case "add": postTeaserImage = "onourjourney.png" cy.get("#postdropzone").selectFile( - { contents: `cypress/fixtures/${this.postTeaserImage}`, fileName: postTeaserImage, mimeType: "image/png" }, + { contents: `cypress/fixtures/${postTeaserImage}`, fileName: postTeaserImage, mimeType: "image/png" }, { action: "drag-drop" } ).wait(750); break; From 40dea1736011662c1251c6f80c8b56e266771cd8 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 11 Jul 2023 13:05:01 +0200 Subject: [PATCH 027/202] update TODO-next-update.md for 2.7.0-470 --- deployment/TODO-next-update.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/deployment/TODO-next-update.md b/deployment/TODO-next-update.md index 8630275b7..8e30d1f47 100644 --- a/deployment/TODO-next-update.md +++ b/deployment/TODO-next-update.md @@ -2,6 +2,10 @@ When you overtake this deploy and rebrand repo to your network you have to recognize the following changes and doings: +## Version >= 2.7.0 with 'ocelotDockerVersionTag' 2.7.0-470 + +- You have to rename all `.js` files to `.ts` in `branding/constants` + ## Version >= 2.4.0 with 'ocelotDockerVersionTag' 2.4.0-298 - You have to set `SHOW_CONTENT_FILTER_HEADER_MENU` and `SHOW_CONTENT_FILTER_MASONRY_GRID` in `branding/constants/filter.js` originally in main code file `webapp/constants/filter.js` to your preferred value. From a427b21948a68a25d43044b4bfc5ab1911d464dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 11 Jul 2023 13:19:35 +0200 Subject: [PATCH 028/202] Renew submodule 'stage.ocelot.social' --- deployment/configurations/stage.ocelot.social | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployment/configurations/stage.ocelot.social b/deployment/configurations/stage.ocelot.social index 350237c62..fdc2e52fa 160000 --- a/deployment/configurations/stage.ocelot.social +++ b/deployment/configurations/stage.ocelot.social @@ -1 +1 @@ -Subproject commit 350237c62dcff1a5c34f1e8d718f89b05ce3d33f +Subproject commit fdc2e52fa444b300e1c4736600bc0e9ae3314222 From 737a8f4380c92cf089efc0dc943d05640dd513d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 11 Jul 2023 13:20:38 +0200 Subject: [PATCH 029/202] Revert "Try to filter only for events with location" This reverts commit f247e6bd7b7554442493b799780186b916890043. --- backend/src/schema/resolvers/posts.ts | 9 ++------- backend/src/schema/types/type/Location.gql | 8 +------- backend/src/schema/types/type/Post.gql | 6 ++---- 3 files changed, 5 insertions(+), 18 deletions(-) diff --git a/backend/src/schema/resolvers/posts.ts b/backend/src/schema/resolvers/posts.ts index c4d695e88..0bd4507b5 100644 --- a/backend/src/schema/resolvers/posts.ts +++ b/backend/src/schema/resolvers/posts.ts @@ -1,6 +1,6 @@ import { v4 as uuid } from 'uuid' import { neo4jgraphql } from 'neo4j-graphql-js' -import { isEmpty, cloneDeep } from 'lodash' +import { isEmpty } from 'lodash' import { UserInputError } from 'apollo-server' import { mergeImage, deleteImage } from './images/images' import Resolver from './helpers/Resolver' @@ -12,15 +12,12 @@ import { createOrUpdateLocations } from './users/location' import CONFIG from '../../config' const maintainPinnedPosts = (params) => { - const filter = cloneDeep(params.filter) const pinnedPostFilter = { pinned: true } if (isEmpty(params.filter)) { params.filter = { OR: [pinnedPostFilter, {}] } } else { - console.log('maintainPinnedPosts before: ', {...filter}) - params.filter = { OR: [pinnedPostFilter, { ...filter }] } + params.filter = { OR: [pinnedPostFilter, { ...params.filter }] } } - console.log('maintainPinnedPosts after: ', {...filter}) return params } @@ -41,8 +38,6 @@ export default { params = await filterForMutedUsers(params, context) params = filterEventDates(params) params = await maintainPinnedPosts(params) - console.log('maintainPinnedPosts filter.OR[1].eventLocation: ', params.filter.OR[1].eventLocation) - console.log('maintainPinnedPosts filter: ', params.filter) return neo4jgraphql(object, params, context, resolveInfo) }, profilePagePosts: async (object, params, context, resolveInfo) => { diff --git a/backend/src/schema/types/type/Location.gql b/backend/src/schema/types/type/Location.gql index 96e2479d2..fad24cc26 100644 --- a/backend/src/schema/types/type/Location.gql +++ b/backend/src/schema/types/type/Location.gql @@ -1,10 +1,3 @@ -input _LocationFilter { - NOT: _LocationFilter - id: ID - id_not: ID - name: String -} - type Location { id: ID! name: String! @@ -32,3 +25,4 @@ type LocationMapBox { type Query { queryLocations(place: String!, lang: String!): [LocationMapBox]! } + diff --git a/backend/src/schema/types/type/Post.gql b/backend/src/schema/types/type/Post.gql index 41525f47e..0a7277515 100644 --- a/backend/src/schema/types/type/Post.gql +++ b/backend/src/schema/types/type/Post.gql @@ -84,10 +84,8 @@ input _PostFilter { group: _GroupFilter postsInMyGroups: Boolean postType_in: [PostType] - eventLocation_not: _LocationFilter - eventLocation: _LocationFilter - eventStart_gte: String - eventEnd_gte: String + eventStart_gte: String + eventEnd_gte: String } enum _PostOrdering { From 1a3f11ac1fbc8bac33043a18e64884f62a49e8f6 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 11 Jul 2023 13:23:32 +0200 Subject: [PATCH 030/202] lint locales --- webapp/locales/de.json | 20 ++++++++++---------- webapp/locales/en.json | 20 ++++++++++---------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/webapp/locales/de.json b/webapp/locales/de.json index c482cfff9..09a03a84c 100644 --- a/webapp/locales/de.json +++ b/webapp/locales/de.json @@ -77,19 +77,19 @@ } } }, - "chat": { - "roomsEmpty" : "Keine Räume", - "roomEmpty" : "Keinen Raum selektiert", - "newMessages" : "Neue Nachrichten", + "chat": { + "cancelSelectMessage": "Abbrechen", + "conversationStarted": "Unterhaltung startete am:", + "isOnline": "online", + "isTyping": "tippt...", + "lastSeen": "zuletzt gesehen ", "messageDeleted": "Diese Nachricht wuerde gelöscht", "messagesEmpty": "Keine Nachrichten", - "conversationStarted": "Unterhaltung startete am:", - "typeMessage": "Nachricht schreiben", + "newMessages": "Neue Nachrichten", + "roomEmpty": "Keinen Raum selektiert", + "roomsEmpty": "Keine Räume", "search": "Suche", - "isOnline": "online", - "lastSeen": "zuletzt gesehen ", - "isTyping": "tippt...", - "cancelSelectMessage": "Abbrechen" + "typeMessage": "Nachricht schreiben" }, "client-only": { "loading": "Lade …" diff --git a/webapp/locales/en.json b/webapp/locales/en.json index 0e71a2f4f..1c1136faf 100644 --- a/webapp/locales/en.json +++ b/webapp/locales/en.json @@ -77,19 +77,19 @@ } } }, - "chat": { - "roomsEmpty" : "No rooms", - "roomEmpty" : "No room selected", - "newMessages" : "New Messages", + "chat": { + "cancelSelectMessage": "Cancel", + "conversationStarted": "Conversation started on:", + "isOnline": "is online", + "isTyping": "is writing...", + "lastSeen": "last seen ", "messageDeleted": "This message was deleted", "messagesEmpty": "No messages", - "conversationStarted": "Conversation started on:", - "typeMessage": "Type message", + "newMessages": "New Messages", + "roomEmpty": "No room selected", + "roomsEmpty": "No rooms", "search": "Search", - "isOnline": "is online", - "lastSeen": "last seen ", - "isTyping": "is writing...", - "cancelSelectMessage": "Cancel" + "typeMessage": "Type message" }, "client-only": { "loading": "Loading …" From c3912304f480efbb7ccac64044de5db008ca69ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 11 Jul 2023 13:24:55 +0200 Subject: [PATCH 031/202] Fix formating --- backend/src/schema/types/type/Location.gql | 1 - backend/src/schema/types/type/Post.gql | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/backend/src/schema/types/type/Location.gql b/backend/src/schema/types/type/Location.gql index fad24cc26..9cb5c970a 100644 --- a/backend/src/schema/types/type/Location.gql +++ b/backend/src/schema/types/type/Location.gql @@ -25,4 +25,3 @@ type LocationMapBox { type Query { queryLocations(place: String!, lang: String!): [LocationMapBox]! } - diff --git a/backend/src/schema/types/type/Post.gql b/backend/src/schema/types/type/Post.gql index 0a7277515..7e6d1d0e7 100644 --- a/backend/src/schema/types/type/Post.gql +++ b/backend/src/schema/types/type/Post.gql @@ -84,8 +84,8 @@ input _PostFilter { group: _GroupFilter postsInMyGroups: Boolean postType_in: [PostType] - eventStart_gte: String - eventEnd_gte: String + eventStart_gte: String + eventEnd_gte: String } enum _PostOrdering { From 82999d377dda05d15b48c958edf1d6b5cc8c3940 Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 11 Jul 2023 15:00:16 +0200 Subject: [PATCH 032/202] disable waiting for actionability at post creation image dropzone --- .../I_should_be_able_to_{string}_a_teaser_image.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cypress/support/step_definitions/Post.Images/I_should_be_able_to_{string}_a_teaser_image.js b/cypress/support/step_definitions/Post.Images/I_should_be_able_to_{string}_a_teaser_image.js index 75d1e352d..478851f92 100644 --- a/cypress/support/step_definitions/Post.Images/I_should_be_able_to_{string}_a_teaser_image.js +++ b/cypress/support/step_definitions/Post.Images/I_should_be_able_to_{string}_a_teaser_image.js @@ -10,14 +10,14 @@ Then("I should be able to {string} a teaser image", condition => { .click() cy.get("#postdropzone").selectFile( { contents: `cypress/fixtures/${postTeaserImage}`, fileName: postTeaserImage, mimeType: "image/png" }, - { action: "drag-drop" } + { action: "drag-drop", force: true } ).wait(750); break; case "add": postTeaserImage = "onourjourney.png" cy.get("#postdropzone").selectFile( { contents: `cypress/fixtures/${postTeaserImage}`, fileName: postTeaserImage, mimeType: "image/png" }, - { action: "drag-drop" } + { action: "drag-drop", force: true } ).wait(750); break; case "remove": From a7260e87148936b6c10af8fa64c95faa9c56b8b7 Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 11 Jul 2023 15:02:51 +0200 Subject: [PATCH 033/202] update cypress run scripts in package.json --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index ad07c21d4..ded743cd5 100644 --- a/package.json +++ b/package.json @@ -15,8 +15,8 @@ "scripts": { "db:seed": "cd backend && yarn run db:seed", "db:reset": "cd backend && yarn run db:reset", - "cypress:run": "cypress run --browser electron --config-file ./cypress/cypress.config.js", - "cypress:open": "cypress open --browser electron --config-file ./cypress/cypress.config.js", + "cypress:run": "cypress run --e2e --browser electron --config-file ./cypress/cypress.config.js", + "cypress:open": "cypress open --e2e --browser electron --config-file ./cypress/cypress.config.js", "cucumber:setup": "cd backend && yarn run dev", "cucumber": "wait-on tcp:4000 && cucumber-js --require-module @babel/register --exit", "release": "yarn version --no-git-tag-version --no-commit-hooks --no-commit && auto-changelog --latest-version $(node -p -e \"require('./package.json').version\") && cd backend && yarn version --no-git-tag-version --no-commit-hooks --no-commit --new-version $(node -p -e \"require('./../package.json').version\") && cd ../webapp && yarn version --no-git-tag-version --no-commit-hooks --no-commit --new-version $(node -p -e \"require('./../package.json').version\") && cd ../webapp/maintenance/source && yarn version --no-git-tag-version --no-commit-hooks --no-commit --new-version $(node -p -e \"require('./../../../package.json').version\")" From a6af78f777f0f9e84a09384ea1f7181ed73d7d49 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 11 Jul 2023 15:44:16 +0200 Subject: [PATCH 034/202] reduce coverage to 67% --- backend/jest.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/jest.config.js b/backend/jest.config.js index 264ad13c0..d1cc7bd3f 100644 --- a/backend/jest.config.js +++ b/backend/jest.config.js @@ -11,7 +11,7 @@ module.exports = { ], coverageThreshold: { global: { - lines: 70, + lines: 67, }, }, testMatch: ['**/src/**/?(*.)+(spec|test).ts?(x)'], From f7480bd381746de22ef49ba0674fe83d6bed1fee Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 11 Jul 2023 20:06:20 +0200 Subject: [PATCH 035/202] add reporter packages to e2e-test directory --- package.json | 1 + yarn.lock | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 9f8399db7..b4e0ee7de 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "import": "^0.0.6", "jsonwebtoken": "^8.5.1", "mock-socket": "^9.0.3", + "multiple-cucumber-html-reporter": "^3.4.0", "neo4j-driver": "^4.3.4", "neode": "^0.4.8", "rosie": "^2.1.0", diff --git a/yarn.lock b/yarn.lock index bae0e9a19..06f722799 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3258,6 +3258,11 @@ debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.2, debug@^4.3.4: dependencies: ms "2.1.2" +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + defined@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf" @@ -3757,6 +3762,13 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" +find@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/find/-/find-0.3.0.tgz#4082e8fc8d8320f1a382b5e4f521b9bc50775cb8" + integrity sha512-iSd+O4OEYV/I36Zl8MdYJO0xD82wH528SaCieTVHhclgiYNe9y+yPKSwK+A7/WsmHL1EZ+pYUJBXWTL5qofksw== + dependencies: + traverse-chain "~0.1.0" + follow-redirects@^1.14.9: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" @@ -3792,6 +3804,15 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" +fs-extra@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" + integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^9.0.0, fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" @@ -4137,6 +4158,11 @@ is-core-module@^2.11.0: dependencies: has "^1.0.3" +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -4234,6 +4260,13 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -4364,7 +4397,7 @@ json5@^2.2.2: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonfile@^6.0.1: +jsonfile@^6.0.1, jsonfile@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== @@ -4575,6 +4608,11 @@ lru-cache@^9.1.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.2.tgz#255fdbc14b75589d6d0e73644ca167a8db506835" integrity sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ== +luxon@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.3.0.tgz#d73ab5b5d2b49a461c47cedbc7e73309b4805b48" + integrity sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg== + make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -4715,6 +4753,19 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +multiple-cucumber-html-reporter@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/multiple-cucumber-html-reporter/-/multiple-cucumber-html-reporter-3.4.0.tgz#03db1772834952c70555ee16074d26c308d18ca4" + integrity sha512-Y2FQA/OosmlsB/ZQUPJvnkKKYFKa/J+Qv2QUl5PsO3BC77jXwyPE8fAWopLH+CEYlRTs7fcdfydmWFitGMFi0A== + dependencies: + find "^0.3.0" + fs-extra "^11.1.1" + jsonfile "^6.1.0" + lodash "^4.17.21" + luxon "^3.3.0" + open "^8.4.2" + uuid "^9.0.0" + mz@^2.4.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" @@ -4833,6 +4884,15 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" +open@^8.4.2: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + optimist@0.3.x: version "0.3.7" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.3.7.tgz#c90941ad59e4273328923074d2cf2e7cbc6ec0d9" @@ -5790,6 +5850,11 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +traverse-chain@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/traverse-chain/-/traverse-chain-0.1.0.tgz#61dbc2d53b69ff6091a12a168fd7d433107e40f1" + integrity sha512-up6Yvai4PYKhpNp5PkYtx50m3KbwQrqDwbuZP/ItyL64YEWHAvH6Md83LFLV/GRSk/BoUVwwgUzX6SOQSbsfAg== + tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -5952,7 +6017,7 @@ util@~0.12.0: is-typed-array "^1.1.3" which-typed-array "^1.1.2" -uuid@9.0.0: +uuid@9.0.0, uuid@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== From 8dd7156195f06267e59ce9c075246efb69ec3205 Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 11 Jul 2023 20:13:27 +0200 Subject: [PATCH 036/202] remove unnecessary code from cypress config --- cypress/cypress.config.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/cypress/cypress.config.js b/cypress/cypress.config.js index b169c0ce0..7decc60e6 100644 --- a/cypress/cypress.config.js +++ b/cypress/cypress.config.js @@ -22,12 +22,6 @@ async function setupNodeEvents(on, config) { }, }); - on("after:run", (results) => { - if (results) { - console.log(results.status); - } - }); - return config; } From 4da06ce800c72c564322722d999948c150e5299d Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 11 Jul 2023 20:16:34 +0200 Subject: [PATCH 037/202] update cypress cucumber preprosessor config in package.json --- package.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index b4e0ee7de..900c132cd 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,19 @@ "url": "https://github.com/Ocelot-Social-Community/Ocelot-Social.git" }, "cypress-cucumber-preprocessor": { - "nonGlobalStepDefinitions": true + "stepDefinitions": "cypress/support/step_definitions/*.ts", + "json": { + "enabled": true, + "output": "cypress/reports/json_logs/cucumber_log.json", + "formatter": "cucumber-json-formatter" + }, + "messages": { + "enabled": true, + "output": "cypress/reports/json_logs/messages.ndjson" + }, + "html": { + "enabled": false + } }, "scripts": { "db:seed": "cd backend && yarn run db:seed", From 8d3dd01724be4b43b77004a5346058e298d74046 Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 11 Jul 2023 20:40:18 +0200 Subject: [PATCH 038/202] add htlm report creation script --- cypress/create-cucumber-html-report.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 cypress/create-cucumber-html-report.js diff --git a/cypress/create-cucumber-html-report.js b/cypress/create-cucumber-html-report.js new file mode 100644 index 000000000..9720f4281 --- /dev/null +++ b/cypress/create-cucumber-html-report.js @@ -0,0 +1,12 @@ +const report = require("multiple-cucumber-html-reporter"); + +const reportTitle = "Ocelot webapp end-to-end test report" + +report.generate({ + jsonDir: "reports/json_logs", + reportPath: "./reports/cucumber_html_report", + pageTitle: reportTitle, + reportName: reportTitle, + pageFooter: "
", + hideMetadata: true +}); \ No newline at end of file From a0b6c67707198f01abc1057cdef947e6cac5997a Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 11 Jul 2023 20:41:38 +0200 Subject: [PATCH 039/202] update github e2e workflow file to reporting related changes --- .github/workflows/test-e2e.yml | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test-e2e.yml b/.github/workflows/test-e2e.yml index 9d007c451..1ea05d1cb 100644 --- a/.github/workflows/test-e2e.yml +++ b/.github/workflows/test-e2e.yml @@ -24,6 +24,14 @@ jobs: - name: boot up test system | docker-compose run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps webapp neo4j backend + - name: End-to-end tests | prepare + run: | + wget --no-verbose -O /opt/cucumber-json-formatter "https://github.com/cucumber/json-formatter/releases/download/v19.0.0/cucumber-json-formatter-linux-386" + chmod +x /opt/cucumber-json-formatter + sudo ln -fs /opt/cucumber-json-formatter /usr/bin/cucumber-json-formatter + cd e2e-tests/ + yarn + - name: cypress | Fullstack tests id: e2e-tests run: | @@ -31,15 +39,22 @@ jobs: yarn install yarn build cd .. - yarn install yarn run cypress:run --spec $(cypress/parallel-features.sh ${{ matrix.job }} ${{ env.jobs }} ) ########################################################################## # UPLOAD SCREENSHOTS - IF TESTS FAIL ##################################### ########################################################################## - - name: Full stack tests | if any test failed, upload screenshots + - name: Full stack tests | if tests failed, compile html report + if: ${{ failure() && steps.e2e-tests.conclusion == 'failure' }} + run: | + cd e2e-tests/ + node create-cucumber-html-report.js + + - name: End-to-end tests | if tests failed, upload report + id: e2e-report if: ${{ failure() && steps.e2e-tests.conclusion == 'failure' }} uses: actions/upload-artifact@v3 with: - name: cypress-screenshots - path: cypress/screenshots/ + name: cypress-report-pr${{ steps.pr.outputs.number }} + path: /home/runner/work/gradido/gradido/e2e-tests/cypress/reports/cucumber_html_report + From d65f87c1a8a396c6944b37a6b48256c8535540dc Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 11 Jul 2023 20:41:38 +0200 Subject: [PATCH 040/202] update github e2e workflow file to reporting related changes --- .github/workflows/test-e2e.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-e2e.yml b/.github/workflows/test-e2e.yml index 1ea05d1cb..d85a265f1 100644 --- a/.github/workflows/test-e2e.yml +++ b/.github/workflows/test-e2e.yml @@ -29,7 +29,7 @@ jobs: wget --no-verbose -O /opt/cucumber-json-formatter "https://github.com/cucumber/json-formatter/releases/download/v19.0.0/cucumber-json-formatter-linux-386" chmod +x /opt/cucumber-json-formatter sudo ln -fs /opt/cucumber-json-formatter /usr/bin/cucumber-json-formatter - cd e2e-tests/ + cd cypress/ yarn - name: cypress | Fullstack tests From 44ac68fb35db2be802875308b3af27c13b2dea73 Mon Sep 17 00:00:00 2001 From: mahula Date: Tue, 11 Jul 2023 20:41:38 +0200 Subject: [PATCH 041/202] update github e2e workflow file to reporting related changes --- .github/workflows/test-e2e.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-e2e.yml b/.github/workflows/test-e2e.yml index d85a265f1..30845ee16 100644 --- a/.github/workflows/test-e2e.yml +++ b/.github/workflows/test-e2e.yml @@ -47,7 +47,7 @@ jobs: - name: Full stack tests | if tests failed, compile html report if: ${{ failure() && steps.e2e-tests.conclusion == 'failure' }} run: | - cd e2e-tests/ + cd cypress/ node create-cucumber-html-report.js - name: End-to-end tests | if tests failed, upload report From a93500488a396c80b9bbc7f63a4f8979f7d33a80 Mon Sep 17 00:00:00 2001 From: mahula Date: Wed, 12 Jul 2023 08:35:39 +0200 Subject: [PATCH 042/202] update github e2e workflow file to reporting related changes --- .github/workflows/test-e2e.yml | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test-e2e.yml b/.github/workflows/test-e2e.yml index 30845ee16..6ac237fb3 100644 --- a/.github/workflows/test-e2e.yml +++ b/.github/workflows/test-e2e.yml @@ -29,17 +29,15 @@ jobs: wget --no-verbose -O /opt/cucumber-json-formatter "https://github.com/cucumber/json-formatter/releases/download/v19.0.0/cucumber-json-formatter-linux-386" chmod +x /opt/cucumber-json-formatter sudo ln -fs /opt/cucumber-json-formatter /usr/bin/cucumber-json-formatter - cd cypress/ - yarn - - - name: cypress | Fullstack tests - id: e2e-tests - run: | cd backend yarn install yarn build cd .. - yarn run cypress:run --spec $(cypress/parallel-features.sh ${{ matrix.job }} ${{ env.jobs }} ) + yarn install + + - name: cypress | Fullstack tests + id: e2e-tests + run: yarn run cypress:run --spec $(cypress/parallel-features.sh ${{ matrix.job }} ${{ env.jobs }} ) ########################################################################## # UPLOAD SCREENSHOTS - IF TESTS FAIL ##################################### From 4c565e92c58d2ed3dcb9ebec5cbb877f9a523eba Mon Sep 17 00:00:00 2001 From: mahula Date: Wed, 12 Jul 2023 09:05:41 +0200 Subject: [PATCH 043/202] correct spec pattern path in cypress config --- .github/workflows/test-e2e.yml | 30 +++++++++++++++--------------- cypress/cypress.config.js | 6 ++++++ 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/.github/workflows/test-e2e.yml b/.github/workflows/test-e2e.yml index 6ac237fb3..5b4267a89 100644 --- a/.github/workflows/test-e2e.yml +++ b/.github/workflows/test-e2e.yml @@ -5,26 +5,26 @@ jobs: fullstack_tests: name: Fullstack tests runs-on: ubuntu-latest - env: - jobs: 8 - strategy: - matrix: - # run copies of the current job in parallel - job: [1, 2, 3, 4, 5, 6, 7, 8] + # env: + # jobs: 8 + # strategy: + # matrix: + # # run copies of the current job in parallel + # job: [1, 2, 3, 4, 5, 6, 7, 8] steps: - name: Checkout code uses: actions/checkout@v3 - - name: webapp | copy env file - run: cp webapp/.env.template webapp/.env + # - name: webapp | copy env file + # run: cp webapp/.env.template webapp/.env - - name: backend | copy env file - run: cp backend/.env.template backend/.env + # - name: backend | copy env file + # run: cp backend/.env.template backend/.env - - name: boot up test system | docker-compose - run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps webapp neo4j backend + # - name: boot up test system | docker-compose + # run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps webapp neo4j backend - - name: End-to-end tests | prepare + - name: Full stack tests | prepare run: | wget --no-verbose -O /opt/cucumber-json-formatter "https://github.com/cucumber/json-formatter/releases/download/v19.0.0/cucumber-json-formatter-linux-386" chmod +x /opt/cucumber-json-formatter @@ -35,9 +35,9 @@ jobs: cd .. yarn install - - name: cypress | Fullstack tests + - name: Full stack tests | run tests id: e2e-tests - run: yarn run cypress:run --spec $(cypress/parallel-features.sh ${{ matrix.job }} ${{ env.jobs }} ) + run: yarn run cypress:run --spec cypress/e2e/Internationalization.feature,cypress/e2e/Post.Comment.feature ########################################################################## # UPLOAD SCREENSHOTS - IF TESTS FAIL ##################################### diff --git a/cypress/cypress.config.js b/cypress/cypress.config.js index 7decc60e6..a2f79bb84 100644 --- a/cypress/cypress.config.js +++ b/cypress/cypress.config.js @@ -22,6 +22,12 @@ async function setupNodeEvents(on, config) { }, }); + on("after:run", (results) => { + if (results) { + console.log(results.status); + } + }); + return config; } From f454ea1159ffcdf743cf7d904580945c0ece4e36 Mon Sep 17 00:00:00 2001 From: mahula Date: Wed, 12 Jul 2023 09:10:00 +0200 Subject: [PATCH 044/202] reset e2e test workflow --- .github/workflows/test-e2e.yml | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/.github/workflows/test-e2e.yml b/.github/workflows/test-e2e.yml index 5b4267a89..769f97a11 100644 --- a/.github/workflows/test-e2e.yml +++ b/.github/workflows/test-e2e.yml @@ -5,24 +5,24 @@ jobs: fullstack_tests: name: Fullstack tests runs-on: ubuntu-latest - # env: - # jobs: 8 - # strategy: - # matrix: - # # run copies of the current job in parallel - # job: [1, 2, 3, 4, 5, 6, 7, 8] + env: + jobs: 8 + strategy: + matrix: + # run copies of the current job in parallel + job: [1, 2, 3, 4, 5, 6, 7, 8] steps: - name: Checkout code uses: actions/checkout@v3 - # - name: webapp | copy env file - # run: cp webapp/.env.template webapp/.env + - name: webapp | copy env file + run: cp webapp/.env.template webapp/.env - # - name: backend | copy env file - # run: cp backend/.env.template backend/.env + - name: backend | copy env file + run: cp backend/.env.template backend/.env - # - name: boot up test system | docker-compose - # run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps webapp neo4j backend + - name: boot up test system | docker-compose + run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps webapp neo4j backend - name: Full stack tests | prepare run: | @@ -37,11 +37,8 @@ jobs: - name: Full stack tests | run tests id: e2e-tests - run: yarn run cypress:run --spec cypress/e2e/Internationalization.feature,cypress/e2e/Post.Comment.feature + run: yarn run cypress:run --spec $(cypress/parallel-features.sh ${{ matrix.job }} ${{ env.jobs }} ) - ########################################################################## - # UPLOAD SCREENSHOTS - IF TESTS FAIL ##################################### - ########################################################################## - name: Full stack tests | if tests failed, compile html report if: ${{ failure() && steps.e2e-tests.conclusion == 'failure' }} run: | @@ -54,5 +51,5 @@ jobs: uses: actions/upload-artifact@v3 with: name: cypress-report-pr${{ steps.pr.outputs.number }} - path: /home/runner/work/gradido/gradido/e2e-tests/cypress/reports/cucumber_html_report + path: /home/runner/work/Ocelot-Social/Ocelot-Social/cypress/reports/cucumber_html_report From 875dfcefa50cd2312de984400474035fa547ebaa Mon Sep 17 00:00:00 2001 From: mahula Date: Wed, 12 Jul 2023 09:10:00 +0200 Subject: [PATCH 045/202] reset e2e test workflow --- cypress/cypress.config.js | 6 ------ package.json | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/cypress/cypress.config.js b/cypress/cypress.config.js index a2f79bb84..b1d80575e 100644 --- a/cypress/cypress.config.js +++ b/cypress/cypress.config.js @@ -21,12 +21,6 @@ async function setupNodeEvents(on, config) { return testStore[name] }, }); - - on("after:run", (results) => { - if (results) { - console.log(results.status); - } - }); return config; } diff --git a/package.json b/package.json index 900c132cd..51c833149 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/Ocelot-Social-Community/Ocelot-Social.git" }, "cypress-cucumber-preprocessor": { - "stepDefinitions": "cypress/support/step_definitions/*.ts", + "stepDefinitions": "cypress/support/step_definitions/**/*.js", "json": { "enabled": true, "output": "cypress/reports/json_logs/cucumber_log.json", From 86bd4bad5b6921e55bb3cb1dd13029719d2ae10e Mon Sep 17 00:00:00 2001 From: Markus Date: Wed, 12 Jul 2023 09:38:31 +0200 Subject: [PATCH 046/202] fixed intends for token style file --- webapp/assets/_new/styles/tokens.scss | 28 +++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/webapp/assets/_new/styles/tokens.scss b/webapp/assets/_new/styles/tokens.scss index 28ebb2abd..d84b92ac9 100644 --- a/webapp/assets/_new/styles/tokens.scss +++ b/webapp/assets/_new/styles/tokens.scss @@ -410,24 +410,24 @@ $color-ribbon-article-active: $background-color-secondary-active; :export { - colorPrimary: $color-primary; - colorPrimaryActive: $color-primary-active; - colorPrimaryLight: $color-primary-light; + colorPrimary: $color-primary; + colorPrimaryActive: $color-primary-active; + colorPrimaryLight: $color-primary-light; - borderColorSoft: $border-color-soft; + borderColorSoft: $border-color-soft; - borderRadiusBase: $border-radius-base; + borderRadiusBase: $border-radius-base; - textColorBase: $text-color-base; - textColorSoft: $text-color-soft; - textColorInverse: $text-color-inverse; + textColorBase: $text-color-base; + textColorSoft: $text-color-soft; + textColorInverse: $text-color-inverse; - boxShadowBase: $box-shadow-base; + boxShadowBase: $box-shadow-base; - backgroundColorBase: $background-color-base; - backgroundColorSoft: $background-color-soft; - backgroundColorSoftest: $background-color-softest; - backgroundColorPrimary: $background-color-primary; + backgroundColorBase: $background-color-base; + backgroundColorSoft: $background-color-soft; + backgroundColorSoftest: $background-color-softest; + backgroundColorPrimary: $background-color-primary; - colorNeutral30: $color-neutral-30; + colorNeutral30: $color-neutral-30; } \ No newline at end of file From 463d2224be3f408755e2f04505ecbd63df315604 Mon Sep 17 00:00:00 2001 From: mahula Date: Wed, 12 Jul 2023 10:00:35 +0200 Subject: [PATCH 047/202] make e2e tests failto test html reporting --- cypress/e2e/UserProfile.ChangePassword.feature | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cypress/e2e/UserProfile.ChangePassword.feature b/cypress/e2e/UserProfile.ChangePassword.feature index a7eec1cce..e3a0bebf7 100644 --- a/cypress/e2e/UserProfile.ChangePassword.feature +++ b/cypress/e2e/UserProfile.ChangePassword.feature @@ -18,7 +18,7 @@ Feature: User profile - change password Scenario: Incorrect Old Password When I fill the password form with: - | Your old password | incorrect | + | Your old password | exposed | | Your new password | secure | | Confirm new password | secure | And I submit the form @@ -50,6 +50,6 @@ Feature: User profile - change password Then I fill in my credentials "peterpan@example.org" "exposed" And I click on "submit button" And I cannot login anymore - But I fill in my credentials "peterpan@example.org" "secure" + But I fill in my credentials "peterpan@example.org" "secu" And I click on "submit button" And I can login successfully From c51f7afd9a7f612ba72c7f3cfca2346316c412d1 Mon Sep 17 00:00:00 2001 From: Markus Date: Wed, 12 Jul 2023 10:15:25 +0200 Subject: [PATCH 048/202] fixed syntax error in default layout --- webapp/layouts/default.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webapp/layouts/default.vue b/webapp/layouts/default.vue index ab8abcbee..bd518b976 100644 --- a/webapp/layouts/default.vue +++ b/webapp/layouts/default.vue @@ -39,9 +39,9 @@ export default { mixins: [seo, mobile()], methods: { closeSingleRoom() { - this.$store.commit('chat/SET_OPEN_CHAT', { showChat: false, roomID: 'u0' }) + this.$store.commit('chat/SET_OPEN_CHAT', { showChat: false, roomID: null }) }, - } + }, beforeCreate() { this.$store.commit('chat/SET_OPEN_CHAT', { showChat: false, roomID: null }) }, From c32be115619de811a14ad82ef50c86cf254b9e11 Mon Sep 17 00:00:00 2001 From: mahula Date: Wed, 12 Jul 2023 10:27:12 +0200 Subject: [PATCH 049/202] add action to retrieve current pr number to e2e test workflow --- .github/workflows/test-e2e.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/test-e2e.yml b/.github/workflows/test-e2e.yml index 769f97a11..0c27163cb 100644 --- a/.github/workflows/test-e2e.yml +++ b/.github/workflows/test-e2e.yml @@ -45,6 +45,11 @@ jobs: cd cypress/ node create-cucumber-html-report.js + - name: End-to-end tests | if tests failed, get pr number + id: pr + if: ${{ failure() && steps.e2e-tests.conclusion == 'failure' }} + uses: 8BitJonny/gh-get-current-pr@2.2.0 + - name: End-to-end tests | if tests failed, upload report id: e2e-report if: ${{ failure() && steps.e2e-tests.conclusion == 'failure' }} From f073553621eae42f833d98277526da260fa10d8f Mon Sep 17 00:00:00 2001 From: mahula Date: Wed, 12 Jul 2023 10:50:58 +0200 Subject: [PATCH 050/202] Revert "make e2e tests failto test html reporting" This reverts commit 463d2224be3f408755e2f04505ecbd63df315604. --- cypress/e2e/UserProfile.ChangePassword.feature | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cypress/e2e/UserProfile.ChangePassword.feature b/cypress/e2e/UserProfile.ChangePassword.feature index e3a0bebf7..a7eec1cce 100644 --- a/cypress/e2e/UserProfile.ChangePassword.feature +++ b/cypress/e2e/UserProfile.ChangePassword.feature @@ -18,7 +18,7 @@ Feature: User profile - change password Scenario: Incorrect Old Password When I fill the password form with: - | Your old password | exposed | + | Your old password | incorrect | | Your new password | secure | | Confirm new password | secure | And I submit the form @@ -50,6 +50,6 @@ Feature: User profile - change password Then I fill in my credentials "peterpan@example.org" "exposed" And I click on "submit button" And I cannot login anymore - But I fill in my credentials "peterpan@example.org" "secu" + But I fill in my credentials "peterpan@example.org" "secure" And I click on "submit button" And I can login successfully From 7a4ca7011c4014b9b802396ecd1bb535ede23440 Mon Sep 17 00:00:00 2001 From: mahula Date: Wed, 12 Jul 2023 10:55:28 +0200 Subject: [PATCH 051/202] improve e2e test report name --- .github/workflows/test-e2e.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-e2e.yml b/.github/workflows/test-e2e.yml index 0c27163cb..74ebd1c43 100644 --- a/.github/workflows/test-e2e.yml +++ b/.github/workflows/test-e2e.yml @@ -55,6 +55,6 @@ jobs: if: ${{ failure() && steps.e2e-tests.conclusion == 'failure' }} uses: actions/upload-artifact@v3 with: - name: cypress-report-pr${{ steps.pr.outputs.number }} + name: ocelot-e2e-test-report-pr${{ steps.pr.outputs.number }} path: /home/runner/work/Ocelot-Social/Ocelot-Social/cypress/reports/cucumber_html_report From 2ea77b784d1e2efbb4d4f1e08c239e1dce114708 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 12 Jul 2023 11:01:17 +0200 Subject: [PATCH 052/202] add saved, distributed and seen props. Handle distributed --- backend/src/graphql/messages.ts | 6 ++++ backend/src/schema/resolvers/messages.spec.ts | 15 +++++++++ backend/src/schema/resolvers/messages.ts | 33 ++++++++++++++++++- backend/src/schema/types/type/Message.gql | 4 +++ 4 files changed, 57 insertions(+), 1 deletion(-) diff --git a/backend/src/graphql/messages.ts b/backend/src/graphql/messages.ts index 4d2220f18..08afe64f4 100644 --- a/backend/src/graphql/messages.ts +++ b/backend/src/graphql/messages.ts @@ -6,6 +6,9 @@ export const createMessageMutation = () => { CreateMessage(roomId: $roomId, content: $content) { id content + saved + distributed + seen } } ` @@ -22,6 +25,9 @@ export const messageQuery = () => { username avatar date + saved + distributed + seen } } ` diff --git a/backend/src/schema/resolvers/messages.spec.ts b/backend/src/schema/resolvers/messages.spec.ts index a43bd3226..8001e8bc5 100644 --- a/backend/src/schema/resolvers/messages.spec.ts +++ b/backend/src/schema/resolvers/messages.spec.ts @@ -122,6 +122,9 @@ describe('Message', () => { CreateMessage: { id: expect.any(String), content: 'Some nice message to other chatting user', + saved: true, + distributed: false, + seen: false, }, }, }) @@ -217,6 +220,9 @@ describe('Message', () => { username: 'Chatting User', avatar: expect.any(String), date: expect.any(String), + saved: true, + distributed: true, + seen: false, }, ], }, @@ -261,6 +267,9 @@ describe('Message', () => { username: 'Chatting User', avatar: expect.any(String), date: expect.any(String), + saved: true, + distributed: true, + seen: false, }), expect.objectContaining({ id: expect.any(String), @@ -269,6 +278,9 @@ describe('Message', () => { username: 'Other Chatting User', avatar: expect.any(String), date: expect.any(String), + saved: true, + distributed: true, + seen: false, }), expect.objectContaining({ id: expect.any(String), @@ -277,6 +289,9 @@ describe('Message', () => { username: 'Chatting User', avatar: expect.any(String), date: expect.any(String), + saved: true, + distributed: false, + seen: false, }), ]), }, diff --git a/backend/src/schema/resolvers/messages.ts b/backend/src/schema/resolvers/messages.ts index b93cffe06..7a2ba418c 100644 --- a/backend/src/schema/resolvers/messages.ts +++ b/backend/src/schema/resolvers/messages.ts @@ -14,9 +14,37 @@ export default { }, } const resolved = await neo4jgraphql(object, params, context, resolveInfo) + if (resolved) { + const undistributedMessagesIds = resolved + .filter((msg) => !msg.distributed && msg.senderId !== context.user.id) + .map((msg) => msg.id) + if (undistributedMessagesIds.length > 0) { + const session = context.driver.session() + const writeTxResultPromise = session.writeTransaction(async (transaction) => { + const setDistributedCypher = ` + MATCH (m:Message) WHERE m.id IN $undistributedMessagesIds + SET m.distributed = true + RETURN m { .* } + ` + const setDistributedTxResponse = await transaction.run(setDistributedCypher, { + undistributedMessagesIds, + }) + const messages = await setDistributedTxResponse.records.map((record) => record.get('m')) + return messages + }) + try { + await writeTxResultPromise + } finally { + session.close() + } + // send subscription to author to updated the messages + } resolved.forEach((message) => { message._id = message.id + if (message.senderId !== context.user.id) { + message.distributed = true + } }) } return resolved @@ -35,7 +63,10 @@ export default { CREATE (currentUser)-[:CREATED]->(message:Message { createdAt: toString(datetime()), id: apoc.create.uuid(), - content: $content + content: $content, + saved: true, + distributed: false, + seen: false })-[:INSIDE]->(room) RETURN message { .* } ` diff --git a/backend/src/schema/types/type/Message.gql b/backend/src/schema/types/type/Message.gql index 4a3346079..a22828a7e 100644 --- a/backend/src/schema/types/type/Message.gql +++ b/backend/src/schema/types/type/Message.gql @@ -16,6 +16,10 @@ type Message { username: String! @cypher(statement: "MATCH (this)<-[:CREATED]-(user:User) RETURN user.name") avatar: String @cypher(statement: "MATCH (this)<-[:CREATED]-(:User)-[:AVATAR_IMAGE]->(image:Image) RETURN image.url") date: String! @cypher(statement: "RETURN this.createdAt") + + saved: Boolean + distributed: Boolean + seen: Boolean } type Mutation { From a5cb81ceacf1ff4974a26fabf93fa1631ff44efa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Wed, 12 Jul 2023 11:24:12 +0200 Subject: [PATCH 053/202] Change group marker from blue to red on map --- webapp/pages/map.vue | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/webapp/pages/map.vue b/webapp/pages/map.vue index 1db2b189a..2bf1817f7 100644 --- a/webapp/pages/map.vue +++ b/webapp/pages/map.vue @@ -117,9 +117,9 @@ export default { { id: 'group', icon: { - id: 'marker-blue', - legendName: 'mapbox-marker-icon-blue.svg', - mapName: 'mapbox-marker-icon-20px-blue.png', + id: 'marker-red', + legendName: 'mapbox-marker-icon-red.svg', + mapName: 'mapbox-marker-icon-20px-red.png', }, }, { @@ -407,7 +407,7 @@ export default { type: 'Feature', properties: { type: 'group', - iconName: 'marker-blue', + iconName: 'marker-red', iconRotate: 0.0, id: group.id, slug: group.slug, From 9f1f02845402e1645e3d18b5992bf671124b5a2f Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 12 Jul 2023 11:53:49 +0200 Subject: [PATCH 054/202] handle seen prop --- backend/src/graphql/messages.ts | 8 +++ .../src/middleware/permissionsMiddleware.ts | 1 + backend/src/schema/resolvers/messages.spec.ts | 72 ++++++++++++++++++- backend/src/schema/resolvers/messages.ts | 23 ++++++ backend/src/schema/types/type/Message.gql | 2 + 5 files changed, 105 insertions(+), 1 deletion(-) diff --git a/backend/src/graphql/messages.ts b/backend/src/graphql/messages.ts index 08afe64f4..34c7d559b 100644 --- a/backend/src/graphql/messages.ts +++ b/backend/src/graphql/messages.ts @@ -32,3 +32,11 @@ export const messageQuery = () => { } ` } + +export const markMessagesAsSeen = () => { + return gql` + mutation ($messageIds: [String!]) { + MarkMessagesAsSeen(messageIds: $messageIds) + } + ` +} diff --git a/backend/src/middleware/permissionsMiddleware.ts b/backend/src/middleware/permissionsMiddleware.ts index 81ba93e3c..c07098a3c 100644 --- a/backend/src/middleware/permissionsMiddleware.ts +++ b/backend/src/middleware/permissionsMiddleware.ts @@ -463,6 +463,7 @@ export default shield( saveCategorySettings: isAuthenticated, CreateRoom: isAuthenticated, CreateMessage: isAuthenticated, + MarkMessagesAsSeen: isAuthenticated, }, User: { email: or(isMyOwn, isAdmin), diff --git a/backend/src/schema/resolvers/messages.spec.ts b/backend/src/schema/resolvers/messages.spec.ts index 8001e8bc5..59512e323 100644 --- a/backend/src/schema/resolvers/messages.spec.ts +++ b/backend/src/schema/resolvers/messages.spec.ts @@ -2,7 +2,7 @@ import { createTestClient } from 'apollo-server-testing' import Factory, { cleanDatabase } from '../../db/factories' import { getNeode, getDriver } from '../../db/neo4j' import { createRoomMutation } from '../../graphql/rooms' -import { createMessageMutation, messageQuery } from '../../graphql/messages' +import { createMessageMutation, messageQuery, markMessagesAsSeen } from '../../graphql/messages' import createServer from '../../server' const driver = getDriver() @@ -323,4 +323,74 @@ describe('Message', () => { }) }) }) + + describe('marks massges as seen', () => { + describe('unauthenticated', () => { + beforeAll(() => { + authenticatedUser = null + }) + + it('throws authorization error', async () => { + await expect( + mutate({ + mutation: markMessagesAsSeen(), + variables: { + messageIds: ['some-id'], + }, + }), + ).resolves.toMatchObject({ + errors: [{ message: 'Not Authorized!' }], + }) + }) + }) + + describe('authenticated', () => { + const messageIds: string[] = [] + beforeAll(async () => { + authenticatedUser = await otherChattingUser.toJson() + const msgs = await query({ + query: messageQuery(), + variables: { + roomId, + }, + }) + msgs.data.Message.forEach((m) => messageIds.push(m.id)) + }) + + it('returns true', async () => { + await expect( + mutate({ + mutation: markMessagesAsSeen(), + variables: { + messageIds, + }, + }), + ).resolves.toMatchObject({ + errors: undefined, + data: { + MarkMessagesAsSeen: true, + }, + }) + }) + + it('has seen prop set to true', async () => { + await expect( + query({ + query: messageQuery(), + variables: { + roomId, + }, + }), + ).resolves.toMatchObject({ + data: { + Message: [ + expect.objectContaining({ seen: true }), + expect.objectContaining({ seen: true }), + expect.objectContaining({ seen: true }), + ], + }, + }) + }) + }) + }) }) diff --git a/backend/src/schema/resolvers/messages.ts b/backend/src/schema/resolvers/messages.ts index 7a2ba418c..82024c310 100644 --- a/backend/src/schema/resolvers/messages.ts +++ b/backend/src/schema/resolvers/messages.ts @@ -89,6 +89,29 @@ export default { session.close() } }, + MarkMessagesAsSeen: async (_parent, params, context, _resolveInfo) => { + const { messageIds } = params + const session = context.driver.session() + const writeTxResultPromise = session.writeTransaction(async (transaction) => { + const setSeenCypher = ` + MATCH (m:Message) WHERE m.id IN $messageIds + SET m.seen = true + RETURN m { .* } + ` + const setSeenTxResponse = await transaction.run(setSeenCypher, { + messageIds, + }) + const messages = await setSeenTxResponse.records.map((record) => record.get('m')) + return messages + }) + try { + await writeTxResultPromise + // send subscription to author to updated the messages + return true + } finally { + session.close() + } + }, }, Message: { ...Resolver('Message', { diff --git a/backend/src/schema/types/type/Message.gql b/backend/src/schema/types/type/Message.gql index a22828a7e..8b9263336 100644 --- a/backend/src/schema/types/type/Message.gql +++ b/backend/src/schema/types/type/Message.gql @@ -27,6 +27,8 @@ type Mutation { roomId: ID! content: String! ): Message + + MarkMessagesAsSeen(messageIds: [String!]): Boolean } type Query { From b2976f06eb41568844ed0cc1cac04d559621a5b0 Mon Sep 17 00:00:00 2001 From: Markus Date: Wed, 12 Jul 2023 12:34:12 +0200 Subject: [PATCH 055/202] updated style for chat component --- webapp/assets/_new/styles/tokens.scss | 16 ++++++++++++++++ webapp/constants/chat.js | 8 ++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/webapp/assets/_new/styles/tokens.scss b/webapp/assets/_new/styles/tokens.scss index d84b92ac9..372dab0c8 100644 --- a/webapp/assets/_new/styles/tokens.scss +++ b/webapp/assets/_new/styles/tokens.scss @@ -408,6 +408,15 @@ $color-ribbon-event-active: $background-color-third-active; $color-ribbon-article: $background-color-secondary; $color-ribbon-article-active: $background-color-secondary-active; +/** + * @tokens Chat Color + */ + +$chat-message-bg-me: $color-primary-light; +$chat-message-color: $text-color-base; +$chat-message-bg-others: $color-neutral-80; +$chat-sidemenu-bg: $color-secondary-active; +$chat-new-message-color: $color-secondary-active; :export { colorPrimary: $color-primary; @@ -430,4 +439,11 @@ $color-ribbon-article-active: $background-color-secondary-active; backgroundColorPrimary: $background-color-primary; colorNeutral30: $color-neutral-30; + + chatMessageColor: $chat-message-color; + + chatMessageBgMe: $chat-message-bg-me; + chatMessageBgOthers: $chat-message-bg-others; + + chatNewMessageColor: $chat-new-message-color; } \ No newline at end of file diff --git a/webapp/constants/chat.js b/webapp/constants/chat.js index 79d8f0cd7..a183a3922 100644 --- a/webapp/constants/chat.js +++ b/webapp/constants/chat.js @@ -57,9 +57,9 @@ const STYLE = { }, message: { - background: styleData.backgroundColorBase, - backgroundMe: styleData.colorPrimaryLight, - color: styleData.textColorBase, + background: styleData.chatMessageBgOthers, + backgroundMe: styleData.chatMessageBgMe, + color: styleData.chatMessageColor, colorStarted: '#9ca6af', backgroundDeleted: '#dadfe2', backgroundSelected: '#c2dcf2', @@ -76,7 +76,7 @@ const STYLE = { colorReply: '#6e6e6e', colorTag: '#0d579c', backgroundImage: '#ddd', - colorNewMessages: '#1976d2', + colorNewMessages: styleData.chatNewMessageColor, backgroundScrollCounter: '#0696c7', colorScrollCounter: '#fff', backgroundReaction: '#eee', From 7e77bc82fb949ed7c45fce05af7ecb1b46f39a2d Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Wed, 12 Jul 2023 13:14:43 +0200 Subject: [PATCH 056/202] new query including index & first, offset and orderBy --- webapp/graphql/Messages.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/webapp/graphql/Messages.js b/webapp/graphql/Messages.js index 41d647d4b..d017f816c 100644 --- a/webapp/graphql/Messages.js +++ b/webapp/graphql/Messages.js @@ -2,10 +2,11 @@ import gql from 'graphql-tag' export const messageQuery = () => { return gql` - query ($roomId: ID!) { - Message(roomId: $roomId) { + query ($roomId: ID!, $first: Int, $offset: Int) { + Message(roomId: $roomId, first: $first, offset: $offset, orderBy: createdAt_desc) { _id id + indexId senderId content author { From 635d3a22326a4acad8b1fa406bd4cdba28889662 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Wed, 12 Jul 2023 13:15:06 +0200 Subject: [PATCH 057/202] new room query --- webapp/graphql/Rooms.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webapp/graphql/Rooms.js b/webapp/graphql/Rooms.js index 7bab25509..e28702f77 100644 --- a/webapp/graphql/Rooms.js +++ b/webapp/graphql/Rooms.js @@ -1,8 +1,8 @@ import gql from 'graphql-tag' export const roomQuery = () => gql` - query { - Room { + query Room($first: Int, $offset: Int) { + Room(first: $first, offset: $offset) { id roomId roomName From 730e15a9ea91d1ecb00a73f8d3b7d8e2d3ca1b2e Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Wed, 12 Jul 2023 13:15:19 +0200 Subject: [PATCH 058/202] working message pagination --- webapp/components/Chat/Chat.vue | 43 +++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/webapp/components/Chat/Chat.vue b/webapp/components/Chat/Chat.vue index 2b9514bf3..8c4ae8447 100644 --- a/webapp/components/Chat/Chat.vue +++ b/webapp/components/Chat/Chat.vue @@ -45,7 +45,8 @@ export default { data() { return { menuActions: [ - /* { + /* + { name: 'inviteUser', title: 'Invite User', }, @@ -56,9 +57,11 @@ export default { { name: 'deleteRoom', title: 'Delete Room', - }, */ + }, + */ ], messageActions: [ + /* { name: 'addMessageToFavorite', title: 'Add To Favorite', @@ -67,6 +70,7 @@ export default { name: 'shareMessage', title: 'Share Message', }, + */ ], templatesText: [ { @@ -109,6 +113,11 @@ export default { showDemoOptions: true, responsiveBreakpoint: 600, singleRoom: !!this.singleRoomId || false, + messagePage: 0, + messagePageSize: 20, + roomPage: 0, + roomPageSize: 999, //TODO pagination is a problem with single rooms - cant use + lastRoom: null } }, mounted() { @@ -138,7 +147,13 @@ export default { }, methods: { fetchMessages({ room, options = {} }) { + if(this.lastRoom != room.id) { + this.messages = [] + this.messagePage = 0, + this.lastRoom = room.id + } this.messagesLoaded = false + const offset = (options.refetch ? 0 : this.messagePage) * this.messagePageSize setTimeout(async () => { try { const { @@ -147,20 +162,32 @@ export default { query: messageQuery(), variables: { roomId: room.id, + first: this.messagePageSize, + offset, }, fetchPolicy: 'no-cache', }) - this.messages = Message + + const msgs = [] + ;[...this.messages, ...Message].forEach((m) => { + msgs[m.indexId] = m + }) + this.messages = msgs.filter( Boolean ) + + + if(Message.length < this.messagePageSize){ + this.messagesLoaded = true + } + this.messagePage += 1 } catch (error) { this.messages = [] this.$toast.error(error.message) } - this.messagesLoaded = true }) }, refetchMessage(roomId) { - this.fetchMessages({ room: this.rooms.find((r) => r.roomId === roomId) }) + this.fetchMessages({ room: this.rooms.find((r) => r.roomId === roomId), options: { refetch: true} }) }, async sendMessage(message) { @@ -183,6 +210,12 @@ export default { query() { return roomQuery() }, + variables() { + return { + first: this.roomPageSize, + offset: this.roomPage* this.roomPageSize, + } + }, update({ Room }) { if (!Room) { this.rooms = [] From 481158f81586b949fb518ba5b8e09b47d38e3c2a Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Wed, 12 Jul 2023 13:15:27 +0200 Subject: [PATCH 059/202] message type definition --- backend/src/schema/types/type/Message.gql | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/backend/src/schema/types/type/Message.gql b/backend/src/schema/types/type/Message.gql index 4a3346079..f97d86dd8 100644 --- a/backend/src/schema/types/type/Message.gql +++ b/backend/src/schema/types/type/Message.gql @@ -2,8 +2,14 @@ # room: _RoomFilter # } +enum _MessageOrdering { + createdAt_asc + createdAt_desc +} + type Message { id: ID! + indexId: String! createdAt: String updatedAt: String @@ -26,5 +32,10 @@ type Mutation { } type Query { - Message(roomId: ID!): [Message] + Message( + roomId: ID!, + first: Int + offset: Int + orderBy: [_MessageOrdering] + ): [Message] } From 0cce43500a13a795d4a3c0a471b4d694982c33e4 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Wed, 12 Jul 2023 13:36:16 +0200 Subject: [PATCH 060/202] backend implementation for message pagination --- backend/src/schema/resolvers/messages.ts | 25 ++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/backend/src/schema/resolvers/messages.ts b/backend/src/schema/resolvers/messages.ts index b93cffe06..5e2335c9b 100644 --- a/backend/src/schema/resolvers/messages.ts +++ b/backend/src/schema/resolvers/messages.ts @@ -13,11 +13,32 @@ export default { id: context.user.id, }, } + // this does not work + // params.orderBy = ['createdAt_desc'] const resolved = await neo4jgraphql(object, params, context, resolveInfo) + if (resolved) { - resolved.forEach((message) => { - message._id = message.id + const session = context.driver.session() + const countMessageTxPromise = session.readTransaction(async (transaction) => { + const countMessageCypher = ` + MATCH((message:Message)-[:INSIDE]->(:Room { id: $roomId })) RETURN COUNT(message) AS count + ` + const countMessageTxResponse = await transaction.run(countMessageCypher, { + roomId, + }) + return await countMessageTxResponse.records[0].get('count') }) + try { + const count = await countMessageTxPromise + for (let i = 0; i < resolved.length; i++) { + resolved[i]._id = resolved[i].id + resolved[i].indexId = count - 1 - params.offset - i + } + } catch (error) { + throw new Error(error) + } finally { + session.close() + } } return resolved }, From 181207a90b924f237fe620289761492417f9c25f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Wed, 12 Jul 2023 14:28:04 +0200 Subject: [PATCH 061/202] Move chat notification button in header to position between language and system notification - Add this button to mobile as well. --- webapp/components/HeaderMenu/HeaderMenu.vue | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/webapp/components/HeaderMenu/HeaderMenu.vue b/webapp/components/HeaderMenu/HeaderMenu.vue index bef73186b..a08bec882 100644 --- a/webapp/components/HeaderMenu/HeaderMenu.vue +++ b/webapp/components/HeaderMenu/HeaderMenu.vue @@ -74,6 +74,10 @@