diff --git a/apps/webapp/app/presenters/TestJobPresenter.server.ts b/apps/webapp/app/presenters/TestJobPresenter.server.ts index a3137bd5f..8225d7e53 100644 --- a/apps/webapp/app/presenters/TestJobPresenter.server.ts +++ b/apps/webapp/app/presenters/TestJobPresenter.server.ts @@ -64,6 +64,15 @@ export class TestJobPresenter { name: "latest", }, }, + _count: { + select: { + runs: { + where: { + isTest: true, + }, + }, + }, + }, }, where: { organization: { @@ -94,6 +103,7 @@ export class TestJobPresenter { payload: JSON.stringify(example.payload, null, 2), })), })), + hasTestRuns: job._count.runs > 0, }; } } diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.jobs.$jobParam.test/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.jobs.$jobParam.test/route.tsx index 8b214edc5..012fdd1b4 100644 --- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.jobs.$jobParam.test/route.tsx +++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.jobs.$jobParam.test/route.tsx @@ -11,6 +11,10 @@ import { EnvironmentLabel } from "~/components/environments/EnvironmentLabel"; import { Button, ButtonContent } from "~/components/primitives/Buttons"; import { Callout } from "~/components/primitives/Callout"; import { FormError } from "~/components/primitives/FormError"; +import { HelpTrigger } from "~/components/primitives/Help"; +import { HelpContent } from "~/components/primitives/Help"; +import { Help } from "~/components/primitives/Help"; +import { Paragraph } from "~/components/primitives/Paragraph"; import { Popover, PopoverContent } from "~/components/primitives/Popover"; import { Select, @@ -34,14 +38,14 @@ export const loader = async ({ request, params }: LoaderArgs) => { JobParamsSchema.parse(params); const presenter = new TestJobPresenter(); - const { environments } = await presenter.call({ + const { environments, hasTestRuns } = await presenter.call({ userId, organizationSlug, projectSlug: projectParam, jobSlug: jobParam, }); - return typedjson({ environments }); + return typedjson({ environments, hasTestRuns }); }; const schema = z.object({ @@ -114,7 +118,7 @@ export default function Page() { const submit = useSubmit(); const lastSubmission = useActionData(); const [isExamplePopoverOpen, setIsExamplePopoverOpen] = useState(false); - const { environments } = useTypedLoaderData(); + const { environments, hasTestRuns } = useTypedLoaderData(); const [defaultJson, setDefaultJson] = useState(startingJson); const currentJson = useRef(defaultJson); @@ -167,86 +171,95 @@ export default function Page() { } return ( - //todo Add help. Make it default open if there are no test runs yet -
submitForm(e)} - > -
- - - - - setIsExamplePopoverOpen(open)} + +
+ submitForm(e)} > - - - Insert an example - - +
+
+ + + - - {selectedEnvironment?.examples.map((example) => ( - - ))} - - + + + Insert an example + + + + + {selectedEnvironment?.examples.map((example) => ( + + ))} + + +
+ +
+
+ (currentJson.current = v)} + minHeight="150px" + /> +
+
+ {payload.error ? ( + {payload.error} + ) : ( +
+ )} + +
+ + + Help content needs writing +
-
- (currentJson.current = v)} - minHeight="150px" - /> -
-
- {payload.error ? ( - {payload.error} - ) : ( -
- )} - -
- + ); }