Skip to content

Commit 003dc5c

Browse files
stirbySomewhatJustinethanndicksonDanielleMaywood
authored
chore: patch known bugs in stable (#14925)
- [x] #14601 - [x] #14602 - [x] #14633 --------- Co-authored-by: Justin Fowler <justinfowler1996@gmail.com> Co-authored-by: Ethan <39577870+ethanndickson@users.noreply.github.com> Co-authored-by: Danielle Maywood <danielle@themaywoods.com>
1 parent 190cd1c commit 003dc5c

File tree

4 files changed

+70
-13
lines changed

4 files changed

+70
-13
lines changed

codersdk/users_test.go

+9-10
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"github.com/google/uuid"
88
"github.com/stretchr/testify/require"
99

10-
"github.com/coder/coder/v2/coderd/coderdtest"
1110
"github.com/coder/coder/v2/codersdk"
1211
)
1312

@@ -109,9 +108,9 @@ func TestCreateUserRequestJSON(t *testing.T) {
109108
t.Parallel()
110109

111110
req := codersdk.CreateUserRequestWithOrgs{
112-
Email: coderdtest.RandomName(t),
113-
Username: coderdtest.RandomName(t),
114-
Name: coderdtest.RandomName(t),
111+
Email: "alice@coder.com",
112+
Username: "alice",
113+
Name: "Alice User",
115114
Password: "",
116115
UserLoginType: codersdk.LoginTypePassword,
117116
OrganizationIDs: []uuid.UUID{uuid.New(), uuid.New()},
@@ -123,9 +122,9 @@ func TestCreateUserRequestJSON(t *testing.T) {
123122
t.Parallel()
124123

125124
req := codersdk.CreateUserRequestWithOrgs{
126-
Email: coderdtest.RandomName(t),
127-
Username: coderdtest.RandomName(t),
128-
Name: coderdtest.RandomName(t),
125+
Email: "alice@coder.com",
126+
Username: "alice",
127+
Name: "Alice User",
129128
Password: "",
130129
UserLoginType: codersdk.LoginTypePassword,
131130
OrganizationIDs: []uuid.UUID{uuid.New()},
@@ -137,9 +136,9 @@ func TestCreateUserRequestJSON(t *testing.T) {
137136
t.Parallel()
138137

139138
req := codersdk.CreateUserRequestWithOrgs{
140-
Email: coderdtest.RandomName(t),
141-
Username: coderdtest.RandomName(t),
142-
Name: coderdtest.RandomName(t),
139+
Email: "alice@coder.com",
140+
Username: "alice",
141+
Name: "Alice User",
143142
Password: "",
144143
UserLoginType: codersdk.LoginTypePassword,
145144
OrganizationIDs: []uuid.UUID{},

site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersForm.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,8 @@ export const WorkspaceParametersForm: FC<WorkspaceParameterFormProps> = ({
154154
<FormFooter
155155
onCancel={onCancel}
156156
isLoading={isSubmitting}
157-
submitDisabled={disabled}
157+
submitLabel="Submit and restart"
158+
submitDisabled={disabled || !form.dirty}
158159
/>
159160
</HorizontalForm>
160161
</>

site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersPage.test.tsx

+58-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,9 @@ test("Submit the workspace settings page successfully", async () => {
6161
);
6262
await user.clear(parameter2);
6363
await user.type(parameter2, "1");
64-
await user.click(within(form).getByRole("button", { name: "Submit" }));
64+
await user.click(
65+
within(form).getByRole("button", { name: "Submit and restart" }),
66+
);
6567
// Assert that the API calls were made with the correct data
6668
await waitFor(() => {
6769
expect(postWorkspaceBuildSpy).toHaveBeenCalledWith(MockWorkspace.id, {
@@ -73,3 +75,58 @@ test("Submit the workspace settings page successfully", async () => {
7375
});
7476
});
7577
});
78+
79+
test("Submit button is only enabled when changes are made", async () => {
80+
// Mock the API calls that loads data
81+
jest
82+
.spyOn(API, "getWorkspaceByOwnerAndName")
83+
.mockResolvedValueOnce(MockWorkspace);
84+
jest.spyOn(API, "getTemplateVersionRichParameters").mockResolvedValueOnce([
85+
MockTemplateVersionParameter1,
86+
MockTemplateVersionParameter2,
87+
// Immutable parameters
88+
MockTemplateVersionParameter4,
89+
]);
90+
jest.spyOn(API, "getWorkspaceBuildParameters").mockResolvedValueOnce([
91+
MockWorkspaceBuildParameter1,
92+
MockWorkspaceBuildParameter2,
93+
// Immutable value
94+
MockWorkspaceBuildParameter4,
95+
]);
96+
// Setup event and rendering
97+
const user = userEvent.setup();
98+
renderWithWorkspaceSettingsLayout(<WorkspaceParametersPage />, {
99+
route: "/@test-user/test-workspace/settings",
100+
path: "/:username/:workspace/settings",
101+
// Need this because after submit the user is redirected
102+
extraRoutes: [{ path: "/:username/:workspace", element: <div /> }],
103+
});
104+
await waitForLoaderToBeRemoved();
105+
106+
const submitButton: HTMLButtonElement = screen.getByRole("button", {
107+
name: "Submit and restart",
108+
});
109+
110+
const form = screen.getByTestId("form");
111+
const parameter1 = within(form).getByLabelText(
112+
MockWorkspaceBuildParameter1.name,
113+
{ exact: false },
114+
);
115+
116+
// There are no changes, the button should be disabled.
117+
expect(submitButton.disabled).toBeTruthy();
118+
119+
// Make changes to the form
120+
await user.clear(parameter1);
121+
await user.type(parameter1, "new-value");
122+
123+
// There are now changes, the button should be enabled.
124+
expect(submitButton.disabled).toBeFalsy();
125+
126+
// Change form value back to default
127+
await user.clear(parameter1);
128+
await user.type(parameter1, MockWorkspaceBuildParameter1.value);
129+
130+
// There are now no changes, the button should be disabled.
131+
expect(submitButton.disabled).toBeTruthy();
132+
});

site/src/utils/docs.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ function defaultDocsUrl(): string {
99
}
1010

1111
// Strip the postfix version info that's not part of the link.
12-
const i = version?.indexOf("-") ?? -1;
12+
const i = version?.match(/[+-]/)?.index ?? -1;
1313
if (i >= 0) {
1414
version = version.slice(0, i);
1515
}

0 commit comments

Comments
 (0)