2.5 KiB
NFR Requirements Questions — Unit 3: frontend-cms-page
Please answer each question by filling in the letter after the [Answer]: tag.
If none of the options match, choose the last option (Other) and describe your preference.
Question 1
How strict should the URL validation be for the url field in AddCmsInstanceDialog?
Context: z.string().url() (Zod strict) rejects bare IPs without protocol (192.168.1.5:8080) and rejects localhost:5000. CMS slave instances may live on a local network or development machine.
A) Strict — z.string().url(). Enforces a valid HTTP/HTTPS URL. User must enter http://192.168.1.5:8080. Backend already validates anyway; this prevents obvious typos.
B) Lenient — z.string().min(1). Any non-empty string is accepted. Backend is the authoritative validator; client only ensures the field is not empty.
C) Custom — Must start with http:// or https://, but the rest is not validated (z.string().regex(/^https?:\/\//)). Prevents protocol-less entries without being as strict as full URL parsing.
D) Other (please describe after Answer: tag below)
Question 2
What test scope applies to the new components and hooks?
A) Page integration only — CmsPage.test.tsx tests the main flows end-to-end (load list, open Add dialog, set status). Individual components are not tested separately. Keeps the test suite lean.
B) Hooks + page integration — Dedicated tests for useCmsInstances, useAddCmsInstance, useUpdateCmsInstanceStatus using renderHook + MSW. Page integration test covers the UI flows. Consistent with existing useUsers pattern.
C) Hooks + page + component tests — In addition to B, dedicated tests for AddCmsInstanceDialog and SetStatusDialog (error state, DisableMessage conditional, etc.). Matches the InviteUserDialog.test.tsx precedent in this project.
D) Other (please describe after Answer: tag below)
Question 3
How should the ApiKey input field behave in AddCmsInstanceDialog?
The user copies the API key from the slave CMS admin panel and pastes it here. It is an infrastructure credential, not a user password.
A) type="password" — Hidden by default. Safe against shoulder surfing. The existing PasswordField component with show/hide toggle can be reused.
B) type="text" — Visible. Easier to verify the pasted value is correct. Acceptable since this is a one-time setup action performed by an Owner in a secure context.
C) Other (please describe after Answer: tag below)