From 68591237c0098f2834356c360d71b8e69cc0fef0 Mon Sep 17 00:00:00 2001 From: Mirrowel Date: Mon, 3 Jun 2024 17:48:31 +0200 Subject: [PATCH] Forgor to upload :skull emoji: --- package.yaml | 1 + test/Spec.hs | 55 +++++++++++++++++++++++++++++++++++++++- test/UserManagerSpec.hs | 37 --------------------------- user-management.cabal | 5 ++-- users.db | Bin 12288 -> 12288 bytes 5 files changed, 58 insertions(+), 40 deletions(-) delete mode 100644 test/UserManagerSpec.hs diff --git a/package.yaml b/package.yaml index 823f1d7..69d917c 100644 --- a/package.yaml +++ b/package.yaml @@ -28,6 +28,7 @@ dependencies: - hspec - text - random +- directory ghc-options: - -Wall diff --git a/test/Spec.hs b/test/Spec.hs index a824f8c..0a2c2be 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -1 +1,54 @@ -{-# OPTIONS_GHC -F -pgmF hspec-discover #-} +{-# LANGUAGE OverloadedStrings #-} + +import Test.Hspec +import UserManager +import Database.SQLite.Simple +import Control.Exception (bracket_) +import System.Directory (removeFile, doesFileExist) + +main :: IO () +main = hspec $ do + describe "UserManager" $ do + beforeAll_ setupDB $ + afterAll_ cleanupDB $ do + it "initializes the database" $ do + conn <- open "test_users.db" + tables <- query_ conn "SELECT name FROM sqlite_master WHERE type='table' AND name='users';" :: IO [Only String] + close conn + tables `shouldBe` [Only "users"] + + it "adds a user" $ do + addUser "test_user" "test@example.com" "password" + users <- listUsers + users `shouldBe` [User "test_user" "test@example.com" "password"] + + it "lists users" $ do + addUser "test_user1" "test1@example.com" "password1" + addUser "test_user2" "test2@example.com" "password2" + users <- listUsers + users `shouldBe` [User "test_user1" "test1@example.com" "password1", User "test_user2" "test2@example.com" "password2"] + + it "finds users by name" $ do + addUser "unique_user" "unique@example.com" "password" + users <- findUsers "unique_user" + users `shouldBe` [User "unique_user" "unique@example.com" "password"] + + it "finds users by email" $ do + addUser "another_user" "another@example.com" "password" + users <- findUsers "another@example.com" + users `shouldBe` [User "another_user" "another@example.com" "password"] + + it "deletes a user" $ do + addUser "delete_user" "delete@example.com" "password" + deleteUser "delete_user" + users <- listUsers + users `shouldSatisfy` all (\user -> userName user /= "delete_user") + +setupDB :: IO () +setupDB = do + conn <- open "test_users.db" + execute_ conn "CREATE TABLE users (name TEXT PRIMARY KEY, email TEXT, password TEXT)" + close conn + +cleanupDB :: IO () +cleanupDB = removeFile "test_users.db" diff --git a/test/UserManagerSpec.hs b/test/UserManagerSpec.hs deleted file mode 100644 index 89eebd3..0000000 --- a/test/UserManagerSpec.hs +++ /dev/null @@ -1,37 +0,0 @@ -module UserManagerSpec (main, spec) where - --- Main entry point for the specs -main :: IO () -main = hspec spec - --- Specs for the UserManager module -spec :: Spec -spec = before_ initializeDB $ do - -- Specs for the UserManager functions - describe "UserManager" $ do - -- Specs for the addUser function - it "should add and list users" $ do - -- Create a user and list all users - addUser "testUser" "testUser@example.com" - users <- listUsers - -- Check that the user was added - users `shouldContain` [User "testUser" "testUser@example.com"] - - -- Specs for the findUser function - it "should find a user" $ do - -- Create a user and search for them - addUser "findUser" "findUser@example.com" - user <- findUser "findUser" - -- Check that the user was found - user `shouldBe` Just (User "findUser" "findUser@example.com") - - -- Specs for the deleteUser function - it "should delete a user" $ do - -- Create a user and delete them - addUser "deleteUser" "deleteUser@example.com" - deleteUser "deleteUser" - -- Check that the user was deleted - user <- findUser "deleteUser" - user `shouldBe` Nothing - - diff --git a/user-management.cabal b/user-management.cabal index 06ac620..995cba7 100644 --- a/user-management.cabal +++ b/user-management.cabal @@ -13,7 +13,6 @@ author: Author name here maintainer: example@example.com copyright: 2024 Author name here license: BSD-3-Clause -license-file: LICENSE.md build-type: Simple extra-source-files: README.md @@ -38,6 +37,7 @@ library base >=4.7 && <5 , bytestring , containers + , directory , exceptions , hspec , random @@ -58,6 +58,7 @@ executable user-management-exe base >=4.7 && <5 , bytestring , containers + , directory , exceptions , hspec , random @@ -70,7 +71,6 @@ test-suite user-management-test type: exitcode-stdio-1.0 main-is: Spec.hs other-modules: - UserManagerSpec Paths_user_management autogen-modules: Paths_user_management @@ -81,6 +81,7 @@ test-suite user-management-test base >=4.7 && <5 , bytestring , containers + , directory , exceptions , hspec , random diff --git a/users.db b/users.db index 108a78802a7764ae6f71e7dc152ea321bc91eded..d8a44c0c44f72983be1d5d53c1d2a57243cfbb6c 100644 GIT binary patch delta 308 zcmZojXh@hK&8Rj}#+gxVW5RlV?gxA@xOKCXz-&HoO->eNL)nznoYa!k_|oFkA_#Nx zLpc#iZ4MSyW7)*K{F02+BCsTs4U`oZS!O6(nwMEv3eg5(f+U2h_2o-ai%Y;7j6f_S zkZEE@3=9l`NK%F%DMOHyh#^o)T~`*a3&a3POx`RX$GMar3O7qBWbw!FGb=M9IhRv_ mS(Opli5x()Y>*tr4&>{=O*Uc!auF68vI4n$aM{TZ^c4UpvS)q( delta 283 zcmZojXh@hK%_uQZ#+gxKW5RlVZc{!u+$<$9n~yEDIJHQ@d~&{=m;l2QLs>A_3_?N# z_dx|s!Gfj`!5L6N6R@BOM6d`dXbcuKh6wsV1&zRhMi4QxVKGW&<+C Sz)T}nAd?%+G@SfEUjYDBU`p=*