Unverified Commit 82e700da authored by mvdbeek's avatar mvdbeek
Browse files

Don't show user-defined-tools in activity bar settings if user doesn't have access

parent fdeb70dc
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ import { PiniaVuePlugin } from "pinia";
import { getLocalVue } from "tests/jest/helpers";
import { nextTick } from "vue";

import { useServerMock } from "@/api/client/__mocks__";
import { defaultActivities } from "@/stores/activitySetup";
import { useActivityStore } from "@/stores/activityStore";

@@ -12,6 +13,7 @@ import mountTarget from "./ActivitySettings.vue";
const localVue = getLocalVue();
localVue.use(PiniaVuePlugin);

const { server, http } = useServerMock();
const activityItemSelector = ".activity-settings-item";

function testActivity(id, newOptions = {}) {
@@ -41,6 +43,12 @@ describe("ActivitySettings", () => {

    beforeEach(async () => {
        const pinia = createTestingPinia({ stubActions: false });
        // Mock the response of the API call
        server.use(
            http.get("/api/unprivileged_tools", ({ params, query, response }) => {
                return response("4XX").json({ err_code: 400, err_msg: "permission problem" }, { status: 403 });
            })
        );
        activityStore = useActivityStore(undefined);
        wrapper = mount(mountTarget, {
            localVue,
@@ -58,7 +66,7 @@ describe("ActivitySettings", () => {

    it("availability of built-in activities", async () => {
        const items = wrapper.findAll(activityItemSelector);
        const nOptional = defaultActivities.filter((x) => x.optional).length;
        const nOptional = defaultActivities.filter((x) => x.optional).length - 1; // 403 for unprivileged_tools excludes user-defined-tools activity
        expect(items.length).toBe(nOptional);
    });

+10 −1
Original line number Diff line number Diff line
@@ -2,11 +2,13 @@
import { faStar as faStarRegular } from "@fortawesome/free-regular-svg-icons";
import { faStar, faTrash } from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
import { storeToRefs } from "pinia";
import { computed, type ComputedRef } from "vue";
import { useRouter } from "vue-router/composables";

import { useActivityStore } from "@/stores/activityStore";
import type { Activity } from "@/stores/activityStoreTypes";
import { useUnprivilegedToolStore } from "@/stores/unprivilegedToolStore";

import GButton from "@/components/BaseComponents/GButton.vue";

@@ -21,7 +23,14 @@ const emit = defineEmits<{

const activityStore = useActivityStore(props.activityBarId);

const optionalActivities = computed(() => activityStore.activities.filter((a) => a.optional));
const unprivilegedToolStore = useUnprivilegedToolStore();
const { canUseUnprivilegedTools } = storeToRefs(unprivilegedToolStore);

const optionalActivities = computed(() => {
    return activityStore.activities.filter(
        (a) => (a.optional && a.id !== "user-defined-tools") || canUseUnprivilegedTools.value
    );
});

const filteredActivities = computed(() => {
    if (props.query?.length > 0) {