Skip to content

Commit b383a0f

Browse files
committed
test: Add storybook
1 parent c7d86ba commit b383a0f

File tree

2 files changed

+122
-3
lines changed

2 files changed

+122
-3
lines changed
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
import { Story } from "@storybook/react"
2+
import dayjs from "dayjs"
3+
import utc from "dayjs/plugin/utc"
4+
import * as Mocks from "../../testHelpers/entities"
5+
import { WorkspaceScheduleButton, WorkspaceScheduleButtonProps } from "./WorkspaceScheduleButton"
6+
7+
dayjs.extend(utc)
8+
9+
// REMARK: There's a known problem with storybook and using date libraries that
10+
// call string.toLowerCase
11+
// SEE: https:github.com/storybookjs/storybook/issues/12208#issuecomment-697044557
12+
const ONE = 1
13+
const SEVEN = 7
14+
const THIRTY = 30
15+
16+
export default {
17+
title: "components/WorkspaceScheduleButton",
18+
component: WorkspaceScheduleButton,
19+
}
20+
21+
const Template: Story<WorkspaceScheduleButtonProps> = (args) => (
22+
<WorkspaceScheduleButton {...args} />
23+
)
24+
25+
export const NoScheduleNoTTL = Template.bind({})
26+
NoScheduleNoTTL.args = {
27+
workspace: {
28+
...Mocks.MockWorkspace,
29+
30+
latest_build: {
31+
...Mocks.MockWorkspaceBuild,
32+
transition: "stop",
33+
},
34+
autostart_schedule: undefined,
35+
ttl_ms: undefined,
36+
},
37+
}
38+
39+
export const NoTTL = Template.bind({})
40+
NoTTL.args = {
41+
workspace: {
42+
...Mocks.MockWorkspace,
43+
latest_build: {
44+
...Mocks.MockWorkspaceBuild,
45+
// a mannual shutdown has a deadline of '"0001-01-01T00:00:00Z"'
46+
// SEE: #1834
47+
deadline: "0001-01-01T00:00:00Z",
48+
},
49+
ttl_ms: undefined,
50+
},
51+
}
52+
53+
export const ShutdownRealSoon = Template.bind({})
54+
ShutdownRealSoon.args = {
55+
workspace: {
56+
...Mocks.MockWorkspace,
57+
latest_build: {
58+
...Mocks.MockWorkspaceBuild,
59+
deadline: dayjs().add(THIRTY, "minute").utc().format(),
60+
transition: "start",
61+
},
62+
ttl_ms: 2 * 60 * 60 * 1000, // 2 hours
63+
},
64+
}
65+
66+
export const ShutdownSoon = Template.bind({})
67+
ShutdownSoon.args = {
68+
workspace: {
69+
...Mocks.MockWorkspace,
70+
latest_build: {
71+
...Mocks.MockWorkspaceBuild,
72+
deadline: dayjs().add(ONE, "hour").utc().format(),
73+
transition: "start",
74+
},
75+
ttl_ms: 2 * 60 * 60 * 1000, // 2 hours
76+
},
77+
}
78+
79+
export const ShutdownLong = Template.bind({})
80+
ShutdownLong.args = {
81+
workspace: {
82+
...Mocks.MockWorkspace,
83+
84+
latest_build: {
85+
...Mocks.MockWorkspaceBuild,
86+
deadline: dayjs().add(SEVEN, "days").utc().format(),
87+
transition: "start",
88+
},
89+
ttl_ms: 7 * 24 * 60 * 60 * 1000, // 7 days
90+
},
91+
}
92+
93+
export const WorkspaceOffShort = Template.bind({})
94+
WorkspaceOffShort.args = {
95+
workspace: {
96+
...Mocks.MockWorkspace,
97+
98+
latest_build: {
99+
...Mocks.MockWorkspaceBuild,
100+
transition: "stop",
101+
},
102+
ttl_ms: 2 * 60 * 60 * 1000, // 2 hours
103+
},
104+
}
105+
106+
export const WorkspaceOffLong = Template.bind({})
107+
WorkspaceOffLong.args = {
108+
workspace: {
109+
...Mocks.MockWorkspace,
110+
111+
latest_build: {
112+
...Mocks.MockWorkspaceBuild,
113+
transition: "stop",
114+
},
115+
ttl_ms: 2 * 365 * 24 * 60 * 60 * 1000, // 2 years
116+
},
117+
}

site/src/components/WorkspaceScheduleButton/WorkspaceScheduleButton.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,14 +129,14 @@ const WorkspaceScheduleLabel: React.FC<{ workspace: Workspace }> = ({ workspace
129129
)
130130
}
131131

132-
interface WorkspaceScheduleProps {
132+
export interface WorkspaceScheduleButtonProps {
133133
workspace: Workspace
134134
onDeadlinePlus: () => void
135135
onDeadlineMinus: () => void
136136
now?: dayjs.Dayjs
137137
}
138138

139-
export const WorkspaceScheduleButton: React.FC<WorkspaceScheduleProps> = ({
139+
export const WorkspaceScheduleButton: React.FC<WorkspaceScheduleButtonProps> = ({
140140
workspace,
141141
onDeadlinePlus,
142142
onDeadlineMinus,
@@ -227,14 +227,16 @@ const useStyles = makeStyles((theme) => ({
227227
alignItems: "center",
228228
padding: "0 8px 0 16px",
229229
color: theme.palette.text.secondary,
230+
// It is from the button props
231+
minHeight: 42,
230232
},
231233

232234
labelText: {
233235
marginRight: theme.spacing(2),
234236
},
235237

236238
labelStrong: {
237-
marginRight: theme.spacing(0.25),
239+
marginRight: theme.spacing(0.5),
238240
},
239241

240242
iconButton: {

0 commit comments

Comments
 (0)