diff --git a/src/store/addressbooks.js b/src/store/addressbooks.js index 3432b6753d..507b2d3609 100644 --- a/src/store/addressbooks.js +++ b/src/store/addressbooks.js @@ -108,25 +108,25 @@ const mutations = { /** * Toggle whether a Addressbook is Enabled * - * @param {object} context the store mutations + * @param {object} state the store data * @param {object} addressbook the addressbook to toggle */ - toggleAddressbookEnabled(context, addressbook) { - addressbook = state.addressbooks.find((search) => search.id === addressbook.id) - addressbook.enabled = !addressbook.enabled + toggleAddressbookEnabled(state, addressbook) { + const storedAddressbook = state.addressbooks.find((search) => search.id === addressbook.id) + storedAddressbook.enabled = !storedAddressbook.enabled }, /** * Rename a Addressbook * - * @param {object} context the store mutations + * @param {object} state the store data * @param {object} data destructuring object * @param {object} data.addressbook the addressbook to rename * @param {string} data.newName the new name of the addressbook */ - renameAddressbook(context, { addressbook, newName }) { - addressbook = state.addressbooks.find((search) => search.id === addressbook.id) - addressbook.displayName = newName + renameAddressbook(state, { addressbook, newName }) { + const storedAddressbook = state.addressbooks.find((search) => search.id === addressbook.id) + storedAddressbook.displayName = newName }, /** diff --git a/tests/javascript/store/addressbooksMutations.test.js b/tests/javascript/store/addressbooksMutations.test.js new file mode 100644 index 0000000000..96ba318693 --- /dev/null +++ b/tests/javascript/store/addressbooksMutations.test.js @@ -0,0 +1,43 @@ +/** + * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +import { computed } from 'vue' +// The store index has to be imported first to avoid a circular import issue +import store from '../../../src/store/index.js' + +describe('addressbooks mutations', () => { + beforeEach(() => { + store.state.addressbooks.addressbooks.splice(0) + store.commit('addAddressbook', { + id: 'ab1', + displayName: 'Address book', + enabled: true, + url: '/remote.php/dav/addressbooks/users/admin/ab1/', + }) + }) + + test('toggleAddressbookEnabled updates the reactive state', () => { + const addressbook = store.getters.getAddressbooks[0] + const enabled = computed(() => addressbook.enabled) + expect(enabled.value).toBe(true) + + store.commit('toggleAddressbookEnabled', addressbook) + + expect(addressbook.enabled).toBe(false) + // the change has to be picked up by reactive consumers, e.g. the settings dialog + expect(enabled.value).toBe(false) + }) + + test('renameAddressbook updates the reactive state', () => { + const addressbook = store.getters.getAddressbooks[0] + const displayName = computed(() => addressbook.displayName) + expect(displayName.value).toBe('Address book') + + store.commit('renameAddressbook', { addressbook, newName: 'Renamed' }) + + expect(addressbook.displayName).toBe('Renamed') + expect(displayName.value).toBe('Renamed') + }) +})