Merge branch 'master' into stage2

This commit is contained in:
einhornimmond 2021-04-12 17:56:04 +02:00
commit b63cf744fe
22 changed files with 358 additions and 109 deletions

View File

@ -33,6 +33,14 @@ services:
volumes:
- ./logs:/var/log/grd_login
- conan:/root/.conan
#########################################################
## COMMUNITY SERVER (cakephp with php-fpm) ##############
#########################################################
community-server:
volumes:
- ./community_server
#########################################################
## NGINX ################################################

BIN
docu/menu-struktur.pdf Normal file

Binary file not shown.

View File

@ -0,0 +1,29 @@
## Gradido Button
Erklärung:
Es soll eine einfache Möglichkeit geben, dass ein User einen anderen User Gradidos überweisen kann.
Es gibt drei Varianten wie dies möglich sein soll.
- per Link - der link verweist auf das Überweisungsformular in der Gradido App.
- Button - der Button hat denselben Link
- QR-Code - der QR code ist derselbe link
## Aufbau des Links
- der link muss
- den Hinweis auf den Community-Server ( community.com )
- Und den Usernamen beinhalten. (u/username)
!!! wichtig ist das der link eine Menschenlesbare Form hat
z.b. https://community.com/u/username
## Wichtig
Dies sollte im Profil an einer zentralen Stelle schnell für den User ersichtlich sein und nutzbar.
Kopierhilfe, Button per HTML code generieren lassen.
Der Link soll z.b. auch auf einer Visitenkarte lesbar und so kurz wie möglich sein.

View File

@ -2,4 +2,5 @@ LOGIN_API_URL=http://localhost/login_api/
COMMUNITY_API_STATE_BALANCE_URL=http://localhost/state-balances/
COMMUNITY_API_TRANSACTION_CREATION_URL=http://localhost/transaction-creations/
COMMUNITY_API_TRANSACTION_SEND_COINS=http://localhost/api
VUE_PATH=/vue
VUE_PATH=/vue
APP_VERSION=0

4
frontend/.gitignore vendored
View File

@ -19,4 +19,8 @@ package-lock.json
*.njsproj
*.sln
# coverage folder
coverage/
*~

View File

@ -1,13 +1,13 @@
module.exports = {
verbose: true,
//collectCoverageFrom: ['**/*.{js,vue}', '!**/node_modules/**', '!**/?(*.)+(spec|test).js?(x)'],
collectCoverageFrom: ['src/**/*.{js,vue}', '!**/node_modules/**', '!**/?(*.)+(spec|test).js?(x)'],
moduleFileExtensions: [
'js',
//'jsx',
'json',
'vue',
],
coverageReporters: ['lcov'],
// coverageReporters: ['lcov', 'text'],
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/$1',
'\\.(css|less)$': 'identity-obj-proxy',

View File

@ -9,7 +9,7 @@
"lint": "eslint --ext .js,.vue .",
"dev": "yarn run serve",
"i18n:report": "vue-cli-service i18n:report --src './src/**/*.?(js|vue)' --locales './src/locales/**/*.json'",
"test": "jest"
"test": "jest --coverage"
},
"dependencies": {
"@babel/core": "^7.13.13",

View File

@ -40,11 +40,11 @@
<span>Transactions</span>
</router-link>
<!--
<router-link to="/activity" class="dropdown-item text-lg text-muted">
<i class="ni ni-calendar-grid-58"></i>
<span>{{ $t('site.navbar.activity') }}</span>
</router-link>
-->
<router-link to="/activity" class="dropdown-item text-lg text-muted">
<i class="ni ni-calendar-grid-58"></i>
<span>{{ $t('site.navbar.activity') }}</span>
</router-link>
-->
<div class="dropdown-divider"></div>
<div @click="logout" class="dropdown-item text-lg text-muted">
<i class="ni ni-support-16"></i>
@ -75,6 +75,17 @@
<slot name="links"></slot>
</ul>
<hr class="my-3" />
<ul class="navbar-nav mb-md-3">
<li class="nav-item">
<a
:href="`https://elopage.com/s/gradido/sign_in?locale=${$i18n.locale}`"
class="nav-link text-lg"
>
{{ $t('site.sidebar.members_area') }}
</a>
</li>
</ul>
<hr class="my-3" />
<ul class="navbar-nav mb-md-3">
<li class="nav-item">
<a class="nav-link text-lg" href="#!" @click="logout">

View File

@ -7,6 +7,7 @@ const environment = {
NODE_ENV: process.env.NODE_ENV,
DEBUG: process.env.NODE_ENV !== 'production' || false,
PRODUCTION: process.env.NODE_ENV === 'production' || false,
APP_VERSION: process.env.APP_VERSION || require('../../package.json').version,
}
const server = {

View File

@ -1,13 +1,14 @@
{
"message": "hallo gradido !!",
"welcome":"Willkommen!",
"community": "Gemeinschaft",
"logout":"Abmelden",
"login":"Login",
"signup": "Registrieren",
"imprint":"Impressum",
"privacy_policy":"Datenschutzerklärung",
"back":"Zurück",
"sent":"Senden",
"send":"Senden",
"transactions":"Transaktionen",
"language":"Language",
"languages":{
@ -15,7 +16,11 @@
"en": "English"
},
"form": {
"attention": "<strong>Achtung!</strong> Bitte überprüfe alle deine Eingaben sehr genau. Du bist alleine Verantwortlich für deine Entscheidungen. Versendete Gradidos können nicht wieder zurück geholt werden.",
"cancel":"Abbrechen",
"close":"schließen",
"receiver":"Empfänger",
"sender":"Absender",
"firstname":"Vorname",
"lastname":"Nachname",
"email":"eMail",
@ -23,13 +28,19 @@
"password":"Passwort",
"password_repeat":"Passwort wiederholen",
"amount":"Betrag",
"memo":"Info",
"memo":"Nachricht für den Empfänger",
"message":"Nachricht",
"date":"Datum",
"from":"von",
"to":"bis",
"at":"am",
"send_now":"Jetzt versenden"
"time":"Zeit",
"send_now":"Jetzt versenden",
"scann_code":"<strong>QR Code Scanner</strong> - Scanne den QR Code deines Partners",
"max_gdd_info":"maximale anzahl GDD zum versenden erreicht!",
"send_check":"Bestätige deine Zahlung. Prüfe bitte nochmal alle Daten!",
"thx":"Danke!",
"send_success":"Deine Zahlung wurde erfolgreich versendet."
},
"transaction":{
"show_part": "Die letzten <strong>{count}</strong> Transaktionen",
@ -61,10 +72,18 @@
"subtitle": "Wir haben dir eine eMail gesendet."
},
"overview":{
"account_overview":"Kontoübersicht",
"since_last_month": "seid letzten Monat",
"send_gradido":"Gradido versenden",
"add_work":"neuer Gemeinschaftsbeitrag"
"account_overview":"Kontoübersicht",
"since_last_month": "seid letzten Monat",
"send_gradido":"Gradido versenden",
"add_work":"neuer Gemeinschaftsbeitrag"
},
"profil": {
"transactions":"transactions",
"activity": {
"chart":"Gemeinschaftsstunden Chart",
"new":"Neue Gemeinschaftsstunden eintragen",
"list":"Meine Gemeinschaftsstunden Liste"
}
},
"navbar" : {
"my-profil":"Mein Profil",
@ -72,24 +91,19 @@
"activity":"Aktivität",
"support":"Support"
},
"sidebar" : {
"community":"Gemeinschaft",
"members_area":"Mitgliederbereich",
"membership":"Mitgliedschaft",
"language":"Sprachen"
},
"landing1" : {
"explore": "Erkunden Sie Gradido",
"text": "Gesundes Geld für eine gesunde Welt — Das Gradido-Modell kann weltweiten Wohlstand und Frieden schaffen",
"link": "Seiten erkunden"
},
"404" : {
"ooops" : "Ooops!",
"text" : "Seite nicht gefunden. Aber keine Sorge, wir haben noch viele andere Seiten zum Erkunden",
"back" : "Zurück zur Übersicht!"
"ooops" : "Ooops!",
"text" : "Seite nicht gefunden. Aber keine Sorge, wir haben noch viele andere Seiten zum Erkunden",
"back" : "Zurück zur Übersicht!"
}
},
"nav": {
"features": "Neuigkeiten"
"communitys":{
"form":{
"hours":"Stunden",
"date_period":"Datum / Zeitraum",
"more_hours":"weitere Stunden",
"submit":"Einreichen",
"hours_report":"Stundenbericht"
}
}
}

View File

@ -1,13 +1,14 @@
{
"message": "hello gradido !!",
"welcome":"Welcome!",
"community": "Gemeinschaft",
"logout":"Logout",
"login":"Login",
"signup": "Sign up",
"imprint":"Legal notice",
"privacy_policy":"Privacy policy",
"back":"Back",
"sent":"Send",
"send":"Send",
"transactions":"Transactions",
"language":"Sprache",
"languages":{
@ -15,7 +16,11 @@
"en": "English"
},
"form": {
"attention": "Achtung! Bitte überprüfe alle deine Eingaben sehr genau. Du bist alleine Verantwortlich für deine Entscheidungen. Versendete Gradidos können nicht wieder zurück geholt werden.",
"cancel":"Cancel",
"close":"Close",
"receiver":"Receiver",
"sender":"Sender",
"firstname":"Firstname",
"lastname":"Lastname",
"email":"Email",
@ -23,14 +28,19 @@
"password":"Password",
"password_repeat":"Repeat password",
"amount":"Amount",
"memo":"Memo",
"memo":"Message for the recipient",
"message":"Message",
"date":"Date",
"from":"from",
"to":"to",
"at":"at",
"time":"Time",
"send_now":"Send now"
"send_now":"Send now",
"scann_code":"<strong>QR Code Scanner</strong> - Scanne den QR Code deines Partners",
"max_gdd_info":"maximale anzahl GDD zum versenden erreicht!",
"send_check":"Bestätige deine Zahlung. Prüfe bitte nochmal alle Daten!",
"thx":"THX",
"send_success":"Deine Zahlung wurde erfolgreich versendet."
},
"transaction":{
"show_part": "The last <strong>{count}</strong> transactions",
@ -67,30 +77,33 @@
"send_gradido":"Send Gradido",
"add_work":"New Community Contribution"
},
"profil": {
"transactions":"transactions",
"activity": {
"chart":"Community Hours Chart",
"new":"Register new community hours",
"list":"My Community Hours List"
}
},
"navbar" : {
"my-profil":"My profile",
"settings":"Settings",
"activity":"Activity",
"support":"Support"
},
"sidebar" : {
"community":"Community",
"members_area":"Members area",
"membership":"Membership",
"language":"Languages"
},
"landing1" : {
"explore":"Explore Gradido",
"text":"Healthy money for a healthy world — the Gradido model can create global prosperity and peace",
"link":"Explore pages"
},
"404" : {
"ooops" : "Ooops!",
"text" : "Page not found. Do not worry though, we have plenty of other pages to explore",
"back" : "Back to dashboard!"
}
},
"nav": {
"features": "Features"
"communitys":{
"form":{
"hours":"hours",
"date_period":"Date / Period",
"more_hours":"more hours",
"submit":"submit",
"hours_report":"Hourly report"
}
}
}

View File

@ -5,7 +5,7 @@ import NotFound from '@/views/NotFoundPage.vue'
const routes = [
{
path: '/',
path: '/login',
redirect: 'login',
component: AuthLayoutGDD,
children: [
@ -33,7 +33,7 @@ const routes = [
],
},
{
path: '/',
path: '/overview',
redirect: 'overview',
component: DashboardLayout,
children: [

View File

@ -126,7 +126,7 @@ export const store = new Vuex.Store({
if (result.success) {
commit('user_balance', result.result.data.balance)
} else {
dispatch('logout')
//dispatch('logout')
}
},
},

View File

@ -4,7 +4,7 @@
<b-tab :title="names.thisMonth" active>
<b-row>
<b-col lg="3">
<base-input label="Stunden">
<base-input :label="$t('communitys.form.hours')">
<b-form-input
type="number"
size="lg"
@ -12,7 +12,7 @@
style="font-size: xx-large; padding-left: 5px"
/>
</base-input>
<base-input label="Datum / Zeitraum">
<base-input :label="$t('communitys.form.date_period')">
<flat-pickr
class="form-control"
v-model="date"
@ -22,7 +22,7 @@
</base-input>
</b-col>
<b-col lg="9">
<base-input label="Arbeitsreport">
<base-input :label="$t('communitys.form.hours_report')">
<textarea
class="form-control"
rows="5"
@ -37,10 +37,14 @@
</b-row>
<b-row>
<b-col md="6">
<b-button @click.prevent="newWorkForm" variant="warning">+ weitere Stunden</b-button>
<b-button @click.prevent="newWorkForm" variant="warning">
+ {{ $t('communitys.form.more_hours') }}
</b-button>
</b-col>
<b-col md="6" class="text-right">
<b-button variant="success" @click.prevent="submitForm2">Einreichen, absenden</b-button>
<b-button variant="success" @click.prevent="submitForm2">
{{ $t('communitys.form.submit') }}
</b-button>
</b-col>
</b-row>
</b-tab>

View File

@ -2,22 +2,17 @@
<div>
<b-row v-show="row_form">
<b-col xl="12" md="12">
<b-alert variant="warning" show dismissible>
<strong>Achtung!</strong>
Bitte überprüfe alle deine Eingaben sehr genau. Du bist alleine Verantwortlich für deine
Entscheidungen. Versendete Gradidos können nicht wieder zurück geholt werden.
</b-alert>
<b-alert variant="warning" show dismissible v-html="$t('form.attention')"></b-alert>
<b-card class="p-0 p-md-3" style="background-color: #ebebeba3 !important">
<b-alert show variant="secondary">
<span class="alert-text">
<strong>QR Code Scanner</strong>
- Scanne den QR Code deines Partners
</span>
<span class="alert-text" v-html="$t('form.scann_code')"></span>
<b-col v-show="!scan" lg="12" class="text-right">
<img src="/img/icons/gradido/qr-scan-pure.png" height="50" @click="scan = true" />
</b-col>
<b-alert v-show="scan" show variant="warning">
<span class="alert-text" @click="scan = false"><strong>schließen!</strong></span>
<span class="alert-text" @click="scan = false">
<strong>{{ $t('form.cancel') }}</strong>
</span>
</b-alert>
<div v-if="scan">
<!-- <b-row>
@ -30,10 +25,7 @@
<b-row>
<b-col lg="8">
<b-alert show variant="secondary">
<span class="alert-text">
<strong>QR Code Scanner</strong>
- Scanne den QR Code deines Partners
</span>
<span class="alert-text" v-html="$t('form.scann_code')"></span>
</b-alert>
</b-col>
</b-row>
@ -54,7 +46,7 @@
</div>
<br />
<div>
<b-col class="text-left p-3 p-sm-1">Empfänger</b-col>
<b-col class="text-left p-3 p-sm-1">{{ $t('form.receiver') }}</b-col>
<b-input-group
id="input-group-1"
@ -80,9 +72,9 @@
</div>
<br />
<div>
<b-col class="text-left p-3 p-sm-1">Betrag</b-col>
<b-col class="text-left p-3 p-sm-1">{{ $t('form.amount') }}</b-col>
<b-col v-if="$store.state.user.balance == form.amount" class="text-right">
<b-badge variant="primary">maximale anzahl GDD zum versenden erreicht!</b-badge>
<b-badge variant="primary">{{ $t('form.max_gdd_info') }}</b-badge>
</b-col>
<b-input-group
id="input-group-2"
@ -105,7 +97,7 @@
style="font-size: xx-large; padding-left: 20px"
></b-form-input>
</b-input-group>
<b-col class="text-left p-3 p-sm-1">Nachricht für den Empfänger</b-col>
<b-col class="text-left p-3 p-sm-1">{{ $t('form.memo') }}</b-col>
<b-input-group>
<b-input-group-prepend class="p-3 d-none d-md-block">
@ -142,34 +134,37 @@
</b-row>
<b-row v-show="row_check">
<b-col>
<div class="display-4 p-4">Bestätige deine Zahlung. Prüfe bitte nochmal alle Daten!</div>
<div class="display-4 p-4">{{ $t('form.send_check') }}</div>
<b-list-group>
<b-list-group-item active>Meine Zahlung</b-list-group-item>
<b-list-group-item class="d-flex justify-content-between align-items-center">
{{ ajaxCreateData.email }}
<b-badge variant="primary" pill>Empfänger</b-badge>
{{ $store.state.ajaxCreateData.email }}
<b-badge variant="primary" pill>{{ $t('form.receiver') }}</b-badge>
</b-list-group-item>
<b-list-group-item class="d-flex justify-content-between align-items-center">
{{ ajaxCreateData.amount }} GDD
<b-badge variant="primary" pill>Betrag</b-badge>
{{ $store.state.ajaxCreateData.amount }} GDD
<b-badge variant="primary" pill>{{ $t('form.amount') }}</b-badge>
</b-list-group-item>
<b-list-group-item class="d-flex justify-content-between align-items-center">
{{ ajaxCreateData.memo }}
<b-badge variant="primary" pill>Nachricht</b-badge>
{{ $store.state.ajaxCreateData.memo }}
<b-badge variant="primary" pill>{{ $t('form.message') }}</b-badge>
</b-list-group-item>
<b-list-group-item class="d-flex justify-content-between align-items-center">
{{ $moment(ajaxCreateData.target_date).format('DD.MM.YYYY - HH:mm:ss') }}
<b-badge variant="primary" pill>Datum</b-badge>
{{ $moment($store.state.ajaxCreateData.target_date).format('DD.MM.YYYY - HH:mm:ss') }}
<b-badge variant="primary" pill>{{ $t('form.date') }}</b-badge>
</b-list-group-item>
</b-list-group>
<hr />
<b-row>
<b-col><b-button @click="onReset">abbrechen</b-button></b-col>
<b-col>
<b-button @click="onReset">{{ $t('form.cancel') }}</b-button>
</b-col>
<b-col class="text-right">
<b-button variant="success" @click="sendTransaction">jetzt versenden</b-button>
<b-button variant="success" @click="sendTransaction">
{{ $t('form.send_now') }}
</b-button>
</b-col>
</b-row>
</b-col>
@ -177,12 +172,12 @@
<b-row v-show="row_thx">
<b-col>
<div class="display-1 p-4">
Danke
{{ $t('form.thx') }}
<hr />
Deine Zahlung wurde erfolgreich versendet.
{{ $t('form.send_success') }}
</div>
<b-button variant="success" @click="onReset">schließen</b-button>
<b-button variant="success" @click="onReset">{{ $t('form.close') }}</b-button>
<hr />
</b-col>
</b-row>
@ -229,6 +224,7 @@ export default {
computed: {},
methods: {
async onDecode(decodedString) {
//console.log('onDecode JSON.parse(decodedString)', JSON.parse(decodedString))
const arr = JSON.parse(decodedString)
this.form.email = arr[0].email
this.form.amount = arr[0].amount

View File

@ -6,7 +6,7 @@
:key="item.id"
style="background-color: #ebebeba3 !important"
>
<div class="d-flex w-100 justify-content-between" @click="toogle(item)">
<div class="d-flex w-100 justify-content-between">
<b-icon
v-if="item.type === 'send'"
icon="box-arrow-left"
@ -33,10 +33,15 @@
<b-collapse :id="'a' + item.transaction_id" class="mt-2">
<b-card>
<b-list-group>
<b-list-group-item>
<b-badge class="mr-4" variant="primary" pill>name</b-badge>
<b-list-group-item v-if="item.type === 'send'">
<b-badge class="mr-4" variant="primary" pill>{{ $t('form.receiver') }}</b-badge>
{{ item.name }}
</b-list-group-item>
<b-list-group-item v-else>
<b-badge class="mr-4" variant="primary" pill>{{ $t('form.sender') }}</b-badge>
{{ item.name }}
</b-list-group-item>
<b-list-group-item>
<b-badge class="mr-4" variant="primary" pill>type</b-badge>
{{ item.type }}
@ -46,7 +51,7 @@
{{ item.transaction_id }}
</b-list-group-item>
<b-list-group-item>
<b-badge class="mr-4" variant="primary" pill>date</b-badge>
<b-badge class="mr-4" variant="primary" pill>{{ $t('form.date') }}</b-badge>
{{ item.date }}
</b-list-group-item>
<b-list-group-item>
@ -54,7 +59,7 @@
{{ item.balance }}
</b-list-group-item>
<b-list-group-item>
<b-badge class="mr-4" variant="primary" pill>memo</b-badge>
<b-badge class="mr-4" variant="primary" pill>{{ $t('form.memo') }}</b-badge>
{{ item.memo }}
</b-list-group-item>
</b-list-group>
@ -134,10 +139,6 @@ export default {
if (item.type === 'send') return 'table-warning'
if (item.type === 'creation') return 'table-primary'
},
toogle(item) {
const temp =
'<b-collapse visible v-bind:id="item.id">xxx <small class="text-muted">porta</small></b-collapse>'
},
},
}
</script>

View File

@ -5,6 +5,10 @@
<div class="copyright text-center text-lg-center text-muted">
© {{ year }}
<a href="#/Login" class="font-weight-bold ml-1">Gradido-Akademie</a>
|
<a href="https://github.com/gradido/gradido/releases/latest" target="_blank">
App Verion {{ version }}
</a>
</div>
</b-col>
</b-row>
@ -20,19 +24,25 @@
<b-nav-item :href="`https://gradido.net/${$i18n.locale}/datenschutz/`" target="_blank">
{{ $t('privacy_policy') }}
</b-nav-item>
<!--<b-nav-item href="#!" to="/explorer" >
GDD-Explorer
</b-nav-item> -->
<b-nav-item
:href="`https://elopage.com/s/gradido/sign_in?locale=${$i18n.locale}`"
target="_blank"
>
{{ $t('site.sidebar.members_area') }}
</b-nav-item>
</b-nav>
</b-col>
</b-row>
</footer>
</template>
<script>
import CONFIG from '../../config'
export default {
data() {
return {
year: new Date().getFullYear(),
version: CONFIG.APP_VERSION,
}
},
}

View File

@ -0,0 +1,144 @@
import { mount, RouterLinkStub } from '@vue/test-utils'
import VueRouter from 'vue-router'
import Vuex from 'vuex'
import flushPromises from 'flush-promises'
import routes from '../../routes/routes'
import DashboardLayoutGdd from './DashboardLayout_gdd'
jest.useFakeTimers()
const localVue = global.localVue
const router = new VueRouter({ routes })
const transitionStub = () => ({
render(h) {
return this.$options._renderChildren
},
})
describe('DashboardLayoutGdd', () => {
let wrapper
let mocks = {
$i18n: {
locale: 'en',
},
$t: jest.fn((t) => t),
$n: jest.fn(),
}
let state = {
user: {
name: 'Peter Lustig',
balance: 2546,
balance_gdt: 20,
},
email: 'peter.lustig@example.org',
}
let stubs = {
RouterLink: RouterLinkStub,
FadeTransition: transitionStub(),
}
let store = new Vuex.Store({
state,
})
const Wrapper = () => {
return mount(DashboardLayoutGdd, { localVue, mocks, router, store, stubs })
}
describe('mount', () => {
beforeEach(() => {
wrapper = Wrapper()
})
it('has a sidebar', () => {
expect(wrapper.find('nav#sidenav-main').exists()).toBeTruthy()
})
it('has a notifications component', () => {
expect(wrapper.find('div.notifications').exists()).toBeTruthy()
})
it('has a main content div', () => {
expect(wrapper.find('div.main-content').exists()).toBeTruthy()
})
it('has a footer inside the main content', () => {
expect(wrapper.find('div.main-content').find('footer.footer').exists()).toBeTruthy()
})
describe('navigation bar', () => {
let navbar
beforeEach(() => {
navbar = wrapper.findAll('ul.navbar-nav').at(0)
})
it('has five items in the navbar', () => {
expect(navbar.findAll('ul > li')).toHaveLength(5)
})
it('has first item "send" in navbar', () => {
expect(navbar.findAll('ul > li').at(0).text()).toEqual('sent')
})
it('has first item "send" linked to overview in navbar', () => {
navbar.findAll('ul > li').at(0).trigger('click')
expect(wrapper.findComponent(RouterLinkStub).props().to).toBe('/overview')
})
it('has second item "transactions" in navbar', () => {
expect(navbar.findAll('ul > li').at(1).text()).toEqual('transactions')
})
// to do: get this working!
it.skip('has second item "transactions" linked to transactions in navbar', async () => {
navbar.findAll('ul > li > a').at(1).trigger('click')
await flushPromises()
await jest.runAllTimers()
await flushPromises()
expect(wrapper.findComponent(RouterLinkStub).props().to).toBe('/transactions')
})
it('has third item "My profile" in navbar', () => {
expect(navbar.findAll('ul > li').at(2).text()).toEqual('site.navbar.my-profil')
})
it.skip('has third item "My profile" linked to profile in navbar', async () => {
navbar.findAll('ul > li > a').at(2).trigger('click')
await flushPromises()
await jest.runAllTimers()
await flushPromises()
expect(wrapper.findComponent(RouterLinkStub).props().to).toBe('/profile')
})
it('has fourth item "Settigs" in navbar', () => {
expect(navbar.findAll('ul > li').at(3).text()).toEqual('site.navbar.settings')
})
it.skip('has fourth item "Settings" linked to profileedit in navbar', async () => {
navbar.findAll('ul > li > a').at(3).trigger('click')
await flushPromises()
await jest.runAllTimers()
await flushPromises()
expect(wrapper.findComponent(RouterLinkStub).props().to).toBe('/profileedit')
})
it('has fifth item "Activity" in navbar', () => {
expect(navbar.findAll('ul > li').at(4).text()).toEqual('site.navbar.activity')
})
it.skip('has fourth item "Activity" linked to activity in navbar', async () => {
navbar.findAll('ul > li > a').at(4).trigger('click')
await flushPromises()
await jest.runAllTimers()
await flushPromises()
expect(wrapper.findComponent(RouterLinkStub).props().to).toBe('/activity')
})
})
})
})

View File

@ -4,7 +4,7 @@
<side-bar>
<template slot="links">
<b-nav-item href="#!" to="/overview">
<b-nav-text class="p-0 text-lg text-muted">{{ $t('sent') }}</b-nav-text>
<b-nav-text class="p-0 text-lg text-muted">{{ $t('send') }}</b-nav-text>
</b-nav-item>
<b-nav-item href="#!" to="/transactions">
<b-nav-text class="p-0 text-lg text-muted">{{ $t('transactions') }}</b-nav-text>
@ -15,7 +15,6 @@
<b-nav-item href="#!" to="/profileedit">
<b-nav-text class="p-0 text-lg text-muted">{{ $t('site.navbar.settings') }}</b-nav-text>
</b-nav-item>
<b-nav-item href="#!" to="/activity">
<b-nav-text class="p-0 text-lg text-muted">{{ $t('site.navbar.activity') }}</b-nav-text>
</b-nav-item>

View File

@ -3,7 +3,7 @@
<div class="header pb-7 pt-5"></div>
<b-container fluid class="mt--6">
<div class="display-4 mb-3">Gemeinschaftsstunden Chart</div>
<div class="display-4 mb-3">{{ $t('site.profil.activity.chart') }}</div>
<b-row>
<b-col>
<div class="chart">
@ -12,7 +12,7 @@
</b-col>
</b-row>
<hr />
<div class="display-4 mt-6">Neue Gemeinschaftsstunden eintragen</div>
<div class="display-4 mt-6">{{ $t('site.profil.activity.new') }}</div>
<b-row>
<b-col>
<gdd-add-work-2 />
@ -20,10 +20,10 @@
</b-row>
<hr />
<div class="display-4 mb-3">Meine Gemeinschaftsstunden Liste</div>
<div class="display-4 mb-3">{{ $t('site.profil.activity.list') }}</div>
<b-row>
<b-col class="mb-5">
community
{{ $t('community') }}
<gdd-work-table></gdd-work-table>
</b-col>
</b-row>

View File

@ -9,6 +9,13 @@ import { messages } from 'vee-validate/dist/locale/en.json'
import BaseInput from '@/components/Inputs/BaseInput.vue'
import BaseButton from '@/components/BaseButton.vue'
import RegeneratorRuntime from 'regenerator-runtime'
import Notifications from '@/components/NotificationPlugin'
import SideBar from '@/components/SidebarPlugin'
import VueRouter from 'vue-router'
import BaseDropdown from '@/components/BaseDropdown.vue'
import VueQrcode from 'vue-qrcode'
import clickOutside from '@/directives/click-ouside.js'
global.localVue = createLocalVue()
@ -24,7 +31,14 @@ global.localVue.use(BootstrapVue)
global.localVue.use(Vuex)
global.localVue.use(IconsPlugin)
global.localVue.use(RegeneratorRuntime)
global.localVue.use(Notifications)
global.localVue.use(SideBar)
global.localVue.use(VueRouter)
global.localVue.use(VueQrcode)
global.localVue.component(BaseInput.name, BaseInput)
global.localVue.component('validation-provider', ValidationProvider)
global.localVue.component('validation-observer', ValidationObserver)
global.localVue.component(BaseButton.name, BaseButton)
global.localVue.component(BaseDropdown.name, BaseDropdown)
global.localVue.directive('click-outside', clickOutside)

View File

@ -221,7 +221,7 @@ Poco::JSON::Object* JsonCreateTransaction::groupMemberUpdate(Poco::Dynamic::Var
return stateError("groupMemberUpdate not allowed with mysql blockchain");
}
if (mTargetGroup.isNull()) {
return stateError("target_group not found");
return stateError("group not found");
}
auto transaction = model::gradido::Transaction::createGroupMemberUpdate(mSession->getNewUser(), mTargetGroup);
if (mAutoSign) {
@ -293,7 +293,7 @@ bool JsonCreateTransaction::getTargetGroup(Poco::Dynamic::Var params)
Poco::JSON::Object::Ptr paramJsonObject = params.extract<Poco::JSON::Object::Ptr>();
try
{
auto target_group = paramJsonObject->get("target_group");
auto target_group = paramJsonObject->get("group");
if (!target_group.isEmpty()) {
target_group.convert(target_group_alias);
auto groups = controller::Group::load(target_group_alias);