@@ -30,8 +30,41 @@ tests = do
3030 ]
3131 , primaryKeyConstraint = PrimaryKeyConstraint [" id" ]
3232 , constraints = []
33- }
34- ]
33+ },
34+ StatementCreateTable CreateTable {
35+ name = " people"
36+ , columns = [
37+ Column
38+ { name = " id"
39+ , columnType = PUUID
40+ , defaultValue = Just (CallExpression " uuid_generate_v4" [] )
41+ , notNull = True
42+ , isUnique = False
43+ , generator = Nothing
44+ }
45+ ,
46+ Column
47+ { name = " name"
48+ , columnType = PText
49+ , defaultValue = Nothing
50+ , notNull = True
51+ , isUnique = False
52+ , generator = Nothing
53+ }
54+ ,
55+ Column
56+ { name = " email"
57+ , columnType = PText
58+ , defaultValue = Nothing
59+ , notNull = True
60+ , isUnique = False
61+ , generator = Nothing
62+ }
63+ ]
64+ , primaryKeyConstraint = PrimaryKeyConstraint [" id" ]
65+ , constraints = []
66+ }
67+ ]
3568 it " should build a controller with name \" pages\" " do
3669 let rawControllerName = " pages"
3770 let controllerName = tableNameToControllerName rawControllerName
@@ -162,7 +195,7 @@ tests = do
162195 let builtPlan = ControllerGenerator. buildPlan' schema applicationName controllerName modelName pagination
163196
164197 builtPlan `shouldBe`
165- [ CreateFile {filePath = "Web/Controller/People.hs", fileContent = "module Web.Controller.People where\n\nimport Web.Controller.Prelude\nimport Web.View.People.Index\nimport Web.View.People.New\nimport Web.View.People.Edit\nimport Web.View.People.Show\n\ninstance Controller PeopleController where\n action PeopleAction = do\n people <- query @Person |> fetch\n render IndexView { .. }\n\n action NewPersonAction = do\n let person = newRecord\n render NewView { .. }\n\n action ShowPersonAction { personId } = do\n person <- fetch personId\n render ShowView { .. }\n\n action EditPersonAction { personId } = do\n person <- fetch personId\n render EditView { .. }\n\n action UpdatePersonAction { personId } = do\n person <- fetch personId\n person\n |> buildPerson\n |> ifValid \\case\n Left person -> render EditView { .. }\n Right person -> do\n person <- person |> updateRecord\n setSuccessMessage \"Person updated\"\n redirectTo EditPersonAction { .. }\n\n action CreatePersonAction = do\n let person = newRecord @Person\n person\n |> buildPerson\n |> ifValid \\case\n Left person -> render NewView { .. } \n Right person -> do\n person <- person |> createRecord\n setSuccessMessage \"Person created\"\n redirectTo PeopleAction\n\n action DeletePersonAction { personId } = do\n person <- fetch personId\n deleteRecord person\n setSuccessMessage \"Person deleted\"\n redirectTo PeopleAction\n\nbuildPerson person = person\n |> fill @'[]\n"}
198+ [ CreateFile {filePath = "Web/Controller/People.hs", fileContent = "module Web.Controller.People where\n\nimport Web.Controller.Prelude\nimport Web.View.People.Index\nimport Web.View.People.New\nimport Web.View.People.Edit\nimport Web.View.People.Show\n\ninstance Controller PeopleController where\n action PeopleAction = do\n people <- query @Person |> fetch\n render IndexView { .. }\n\n action NewPersonAction = do\n let person = newRecord\n render NewView { .. }\n\n action ShowPersonAction { personId } = do\n person <- fetch personId\n render ShowView { .. }\n\n action EditPersonAction { personId } = do\n person <- fetch personId\n render EditView { .. }\n\n action UpdatePersonAction { personId } = do\n person <- fetch personId\n person\n |> buildPerson\n |> ifValid \\case\n Left person -> render EditView { .. }\n Right person -> do\n person <- person |> updateRecord\n setSuccessMessage \"Person updated\"\n redirectTo EditPersonAction { .. }\n\n action CreatePersonAction = do\n let person = newRecord @Person\n person\n |> buildPerson\n |> ifValid \\case\n Left person -> render NewView { .. } \n Right person -> do\n person <- person |> createRecord\n setSuccessMessage \"Person created\"\n redirectTo PeopleAction\n\n action DeletePersonAction { personId } = do\n person <- fetch personId\n deleteRecord person\n setSuccessMessage \"Person deleted\"\n redirectTo PeopleAction\n\nbuildPerson person = person\n |> fill @[\"name\", \"email\"]\n"}
166199 , AppendToFile {filePath = " Web/Routes.hs" , fileContent = " \n instance AutoRoute PeopleController\n\n " }
167200 , AppendToFile {filePath = " Web/Types.hs" , fileContent = " \n data PeopleController\n = PeopleAction\n | NewPersonAction\n | ShowPersonAction { personId :: !(Id Person) }\n | CreatePersonAction\n | EditPersonAction { personId :: !(Id Person) }\n | UpdatePersonAction { personId :: !(Id Person) }\n | DeletePersonAction { personId :: !(Id Person) }\n deriving (Eq, Show, Data)\n " }
168201 , AppendToMarker {marker = " -- Controller Imports" , filePath = " Web/FrontController.hs" , fileContent = " import Web.Controller.People" }
@@ -171,17 +204,15 @@ tests = do
171204 , CreateFile {filePath = "Web/View/People/Index.hs", fileContent = "module Web.View.People.Index where\nimport Web.View.Prelude\n\ndata IndexView = IndexView { people :: [Person] }\n\ninstance View IndexView where\n html IndexView { .. } = [hsx|\n {breadcrumb}\n\n <h1>Index<a href={pathTo NewPersonAction} class=\"btn btn-primary ml-4\">+ New</a></h1>\n <div class=\"table-responsive\">\n <table class=\"table\">\n <thead>\n <tr>\n <th>Person</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>{forEach people renderPerson}</tbody>\n </table>\n \n </div>\n |]\n where\n breadcrumb = renderBreadcrumb\n [ breadcrumbLink \"People\" PeopleAction\n ]\n\nrenderPerson :: Person -> Html\nrenderPerson person = [hsx|\n <tr>\n <td>{person}</td>\n <td><a href={ShowPersonAction person.id}>Show</a></td>\n <td><a href={EditPersonAction person.id} class=\"text-muted\">Edit</a></td>\n <td><a href={DeletePersonAction person.id} class=\"js-delete text-muted\">Delete</a></td>\n </tr>\n|]"}
172205 , AddImport {filePath = " Web/Controller/People.hs" , fileContent = " import Web.View.People.Index" }
173206 , EnsureDirectory {directory = " Web/View/People" }
174- , CreateFile {filePath = " Web/View/People/New.hs" , fileContent = " module Web.View.People.New where\n import Web.View.Prelude\n\n data NewView = NewView { person :: Person }\n\n instance View NewView where\n html NewView { .. } = [hsx|\n {breadcrumb}\n <h1>New Person</h1>\n {renderForm person}\n |]\n where\n breadcrumb = renderBreadcrumb\n [ breadcrumbLink \" People\" PeopleAction\n , breadcrumbText \" New Person\"\n ]\n\n renderForm :: Person -> Html\n renderForm person = formFor person [hsx|\n \n {submitButton}\n\n |]" }
207+ , CreateFile {filePath = " Web/View/People/New.hs" , fileContent = " module Web.View.People.New where\n import Web.View.Prelude\n\n data NewView = NewView { person :: Person }\n\n instance View NewView where\n html NewView { .. } = [hsx|\n {breadcrumb}\n <h1>New Person</h1>\n {renderForm person}\n |]\n where\n breadcrumb = renderBreadcrumb\n [ breadcrumbLink \" People\" PeopleAction\n , breadcrumbText \" New Person\"\n ]\n\n renderForm :: Person -> Html\n renderForm person = formFor person [hsx|\n {(textField #name)} \n {(textField #email)} \n {submitButton}\n\n |]" }
175208 , AddImport {filePath = " Web/Controller/People.hs" , fileContent = " import Web.View.People.New" }
176209 , EnsureDirectory {directory = " Web/View/People" }
177210 , CreateFile {filePath = " Web/View/People/Show.hs" , fileContent = " module Web.View.People.Show where\n import Web.View.Prelude\n\n data ShowView = ShowView { person :: Person }\n\n instance View ShowView where\n html ShowView { .. } = [hsx|\n {breadcrumb}\n <h1>Show Person</h1>\n <p>{person}</p>\n\n |]\n where\n breadcrumb = renderBreadcrumb\n [ breadcrumbLink \" People\" PeopleAction\n , breadcrumbText \" Show Person\"\n ]" }
178211 , AddImport {filePath = " Web/Controller/People.hs" , fileContent = " import Web.View.People.Show" }
179212 , EnsureDirectory {directory = " Web/View/People" }
180- , CreateFile {filePath = " Web/View/People/Edit.hs" , fileContent = " module Web.View.People.Edit where\n import Web.View.Prelude\n\n data EditView = EditView { person :: Person }\n\n instance View EditView where\n html EditView { .. } = [hsx|\n {breadcrumb}\n <h1>Edit Person</h1>\n {renderForm person}\n |]\n where\n breadcrumb = renderBreadcrumb\n [ breadcrumbLink \" People\" PeopleAction\n , breadcrumbText \" Edit Person\"\n ]\n\n renderForm :: Person -> Html\n renderForm person = formFor person [hsx|\n \n {submitButton}\n\n |]" }
213+ , CreateFile {filePath = " Web/View/People/Edit.hs" , fileContent = " module Web.View.People.Edit where\n import Web.View.Prelude\n\n data EditView = EditView { person :: Person }\n\n instance View EditView where\n html EditView { .. } = [hsx|\n {breadcrumb}\n <h1>Edit Person</h1>\n {renderForm person}\n |]\n where\n breadcrumb = renderBreadcrumb\n [ breadcrumbLink \" People\" PeopleAction\n , breadcrumbText \" Edit Person\"\n ]\n\n renderForm :: Person -> Html\n renderForm person = formFor person [hsx|\n {(textField #name)} \n {(textField #email)} \n {submitButton}\n\n |]" }
181214 , AddImport {filePath = " Web/Controller/People.hs" , fileContent = " import Web.View.People.Edit" }
182215 ]
183216
184217
185218
186-
187-
0 commit comments