(t *testing.T)
| 13097 | } |
| 13098 | |
| 13099 | func TestChatWorkspaceTTL(t *testing.T) { |
| 13100 | t.Parallel() |
| 13101 | ctx := testutil.Context(t, testutil.WaitLong) |
| 13102 | |
| 13103 | adminClient := newChatClient(t) |
| 13104 | firstUser := coderdtest.CreateFirstUser(t, adminClient.Client) |
| 13105 | memberClientRaw, _ := coderdtest.CreateAnotherUser(t, adminClient.Client, firstUser.OrganizationID) |
| 13106 | memberClient := codersdk.NewExperimentalClient(memberClientRaw) |
| 13107 | anonClient := codersdk.NewExperimentalClient(codersdk.New(adminClient.URL)) |
| 13108 | |
| 13109 | // Default value is 0 (disabled) when nothing has been configured. |
| 13110 | resp, err := adminClient.GetChatWorkspaceTTL(ctx) |
| 13111 | require.NoError(t, err, "get default") |
| 13112 | require.Equal(t, int64(0), resp.WorkspaceTTLMillis, "default should be 0") |
| 13113 | |
| 13114 | // Admin can set a positive TTL (2h = 7_200_000 ms). |
| 13115 | err = adminClient.UpdateChatWorkspaceTTL(ctx, codersdk.UpdateChatWorkspaceTTLRequest{ |
| 13116 | WorkspaceTTLMillis: 7_200_000, |
| 13117 | }) |
| 13118 | require.NoError(t, err, "admin set 2h") |
| 13119 | |
| 13120 | resp, err = adminClient.GetChatWorkspaceTTL(ctx) |
| 13121 | require.NoError(t, err, "get after set") |
| 13122 | require.Equal(t, int64(7_200_000), resp.WorkspaceTTLMillis, "should return 7200000 ms (2h)") |
| 13123 | |
| 13124 | // Non-admin can read the value. |
| 13125 | resp, err = memberClient.GetChatWorkspaceTTL(ctx) |
| 13126 | require.NoError(t, err, "member get") |
| 13127 | require.Equal(t, int64(7_200_000), resp.WorkspaceTTLMillis, "member should see same value") |
| 13128 | |
| 13129 | // Admin can set back to zero (disabled / template default). |
| 13130 | err = adminClient.UpdateChatWorkspaceTTL(ctx, codersdk.UpdateChatWorkspaceTTLRequest{ |
| 13131 | WorkspaceTTLMillis: 0, |
| 13132 | }) |
| 13133 | require.NoError(t, err, "admin set 0") |
| 13134 | |
| 13135 | resp, err = adminClient.GetChatWorkspaceTTL(ctx) |
| 13136 | require.NoError(t, err, "get after zero") |
| 13137 | require.Equal(t, int64(0), resp.WorkspaceTTLMillis, "should be 0 after reset") |
| 13138 | |
| 13139 | // Non-admin write is forbidden. |
| 13140 | err = memberClient.UpdateChatWorkspaceTTL(ctx, codersdk.UpdateChatWorkspaceTTLRequest{ |
| 13141 | WorkspaceTTLMillis: 3_600_000, |
| 13142 | }) |
| 13143 | requireSDKError(t, err, http.StatusForbidden) |
| 13144 | |
| 13145 | // Unauthenticated read is rejected. |
| 13146 | _, err = anonClient.GetChatWorkspaceTTL(ctx) |
| 13147 | var sdkErr *codersdk.Error |
| 13148 | require.ErrorAs(t, err, &sdkErr, "anon get") |
| 13149 | require.Equal(t, http.StatusUnauthorized, sdkErr.StatusCode(), "anon should get 401") |
| 13150 | |
| 13151 | // Validation: negative duration. |
| 13152 | err = adminClient.UpdateChatWorkspaceTTL(ctx, codersdk.UpdateChatWorkspaceTTLRequest{ |
| 13153 | WorkspaceTTLMillis: -3_600_000, |
| 13154 | }) |
| 13155 | requireSDKError(t, err, http.StatusBadRequest) |
| 13156 |
nothing calls this directly
no test coverage detected