on dev help sign in
foreign key test
f920afbEitan Chatav
squeel-postgresql/test/Squeel/PostgreSQL/StatementSpec.hs+36
@@ -8,6 +8,7 @@
8
8
9module Squeel.PostgreSQL.StatementSpec where
9module Squeel.PostgreSQL.StatementSpec where
10
10
11+import Control.Category ((>>>))
11import Data.Function
12import Data.Function
12import Generics.SOP hiding (from)
13import Generics.SOP hiding (from)
13import Test.Hspec
14import Test.Hspec
@@ -243,6 +244,41 @@ spec = do
243 \ col2 text,\
244 \ col2 text,\
244 \ col3 int8 NOT NULL DEFAULT 8,\
245 \ col3 int8 NOT NULL DEFAULT 8,\
245 \ CHECK (col3 > 0));"
246 \ CHECK (col3 > 0));"
247+ let
248+ statement :: Definition '[]
249+ '[ "users" :::
250+ '[ "id" ::: 'Optional ('NotNull 'PGInt4)
251+ , "username" ::: 'Required ('NotNull 'PGText)
252+ ]
253+ , "emails" :::
254+ '[ "id" ::: 'Optional ('NotNull 'PGInt4)
255+ , "userid" ::: 'Required ('NotNull 'PGInt4)
256+ , "email" ::: 'Required ('NotNull 'PGText)
257+ ]
258+ ]
259+ statement =
260+ createTable #users
261+ (serial `As` #id :* (text & notNull) `As` #username :* Nil)
262+ [primaryKey (Column #id :* Nil)]
263+ >>>
264+ createTable #emails
265+ ( serial `As` #id :*
266+ (integer & notNull) `As` #userid :*
267+ (text & notNull) `As` #email :* Nil )
268+ [ primaryKey (Column #id :* Nil)
269+ , foreignKey (Column #userid :* Nil) #users (Column #id :* Nil)
270+ ]
271+ statement `definitionRenders`
272+ "CREATE TABLE users\
273+ \ (id serial, username text NOT NULL,\
274+ \ PRIMARY KEY (id));\
275+ \ \
276+ \CREATE TABLE emails\
277+ \ (id serial,\
278+ \ userid integer NOT NULL,\
279+ \ email text NOT NULL,\
280+ \ PRIMARY KEY (id),\
281+ \ FOREIGN KEY (userid) REFERENCES users (id));"
246 it "should render DROP TABLE statements" $ do
282 it "should render DROP TABLE statements" $ do
247 let
283 let
248 statement :: Definition Tables '[]
284 statement :: Definition Tables '[]