feat: allow admins to create workspaces for other users in UI (#4247)

* added permission for creating a workspace on behalf of a user

* committing stashed files

* hooked up autocomplete for users

* added label

* added translations

* wrote test

* added inputMargin prop

* fixed permissions

* added inputSTyle prop

* ran prettier

* fix lint
This commit is contained in:
Kira Pilot
2022-09-29 14:32:38 -04:00
committed by GitHub
parent 70d7dd9b2f
commit 776f287685
9 changed files with 169 additions and 74 deletions

View File

@ -1,12 +1,16 @@
/* eslint-disable @typescript-eslint/no-floating-promises */
import { screen } from "@testing-library/react"
import { fireEvent, screen, waitFor } from "@testing-library/react"
import userEvent from "@testing-library/user-event"
import * as API from "api/api"
import { Language as FooterLanguage } from "../../components/FormFooter/FormFooter"
import { MockTemplate, MockWorkspace } from "../../testHelpers/entities"
import { renderWithAuth } from "../../testHelpers/renderHelpers"
import { Language as FooterLanguage } from "components/FormFooter/FormFooter"
import i18next from "i18next"
import { MockTemplate, MockUser, MockWorkspace, MockWorkspaceRequest } from "testHelpers/entities"
import { renderWithAuth } from "testHelpers/renderHelpers"
import CreateWorkspacePage from "./CreateWorkspacePage"
import { Language } from "./CreateWorkspacePageView"
const { t } = i18next
const nameLabelText = t("nameLabel", { ns: "createWorkspacePage" })
const renderCreateWorkspacePage = () => {
return renderWithAuth(<CreateWorkspacePage />, {
@ -22,14 +26,26 @@ describe("CreateWorkspacePage", () => {
expect(element).toBeDefined()
})
it("succeeds", async () => {
it("succeeds with default owner", async () => {
jest.spyOn(API, "getUsers").mockResolvedValueOnce([MockUser])
jest.spyOn(API, "createWorkspace").mockResolvedValueOnce(MockWorkspace)
renderCreateWorkspacePage()
const nameField = await screen.findByLabelText(Language.nameLabel)
userEvent.type(nameField, "test")
const nameField = await screen.findByLabelText(nameLabelText)
// have to use fireEvent b/c userEvent isn't cleaning up properly between tests
fireEvent.change(nameField, {
target: { value: "test" },
})
const submitButton = screen.getByText(FooterLanguage.defaultSubmitLabel)
userEvent.click(submitButton)
await waitFor(() =>
expect(API.createWorkspace).toBeCalledWith(MockUser.organization_ids[0], MockUser.id, {
...MockWorkspaceRequest,
}),
)
})
})