diff --git a/auth/robot/auth.resource b/auth/robot/auth.resource new file mode 100644 index 00000000..0c36d6f2 --- /dev/null +++ b/auth/robot/auth.resource @@ -0,0 +1,43 @@ +*** Settings *** +Documentation Common things to handle rest requests + +Library REST http://localhost:8901/api + + +*** Keywords *** +Login + [Documentation] Shortcut to login with the given username for future requests + [Arguments] ${username} + &{res}= POST /sessions {"username": "${username}", "password": "password-${username}"} + Output + Integer response status 201 + String response body access_token + ConvertToJwt ${res.body.token} + +Register + [Documentation] Shortcut to register with the given username for future requests + [Arguments] ${username} + &{res}= POST + ... /users + ... {"username": "${username}", "password": "password-${username}", "email": "${username}@zoriya.dev"} + Output + Integer response status 201 + String response body token + ConvertToJwt ${res.body.token} + +ConvertToJwt + [Documentation] Convert a session token to a jwt and set it in the header + [Arguments] ${token} + Set Headers {"Authorization": "Bearer ${token}"} + ${res}= GET /jwt + Output + Integer response status 200 + String response body token + Set Headers {"Authorization": "Bearer ${res.token}"} + +Logout + [Documentation] Logout the current user, only the local client is affected. + ${res}= DELETE /sessions/current + Output + Integer response status 200 + Set Headers {"Authorization": ""} diff --git a/auth/robot/sessions.robot b/auth/robot/sessions.robot new file mode 100644 index 00000000..b695f39f --- /dev/null +++ b/auth/robot/sessions.robot @@ -0,0 +1,29 @@ +*** Settings *** +Documentation Tests of the /sessions route. + +Resource ../auth.resource + + +*** Test Cases *** +Bad Account + [Documentation] Login fails if user does not exist + POST /sessions {"login": "i-don-t-exist", "password": "pass"} + Output + Integer response status 403 + +Login + [Documentation] Create a new user and login in it + Register login-user + ${res}= GET /users/me + Output + Integer response status 200 + String response body username login-user + + Logout + Login login-user + ${me}= Get /users/me + Output + Output ${me} + Should Be Equal As Strings ${res["body"]} ${me["body"]} + + [Teardown] DELETE /auth/me diff --git a/auth/robot/users.robot b/auth/robot/users.robot new file mode 100644 index 00000000..3d51bd93 --- /dev/null +++ b/auth/robot/users.robot @@ -0,0 +1,33 @@ +*** Settings *** +Documentation Tests of the /users route. +... Ensures that the user can authenticate on kyoo. + +Resource ../auth.resource + + +*** Test Cases *** +Me cant be accessed without an account + Get /users/me + Output + Integer response status 401 + +Register + [Documentation] Create a new user and login in it + Register user-1 + [Teardown] DELETE /users/me + +Register Duplicates + [Documentation] If two users tries to register with the same username, it fails + Register user-duplicate + # We can't use the `Register` keyword because it assert for success + POST /auth/register {"username": "user-duplicate", "password": "pass", "email": "mail@zoriya.dev"} + Output + Integer response status 409 + [Teardown] DELETE /users/me + +Delete Account + [Documentation] Check if a user can delete it's account + Register I-should-be-deleted + DELETE /users/me + Output + Integer response status 200 diff --git a/back/tests/robot/auth/auth.robot b/back/tests/robot/auth/auth.robot index 6b361ddd..02b7617b 100644 --- a/back/tests/robot/auth/auth.robot +++ b/back/tests/robot/auth/auth.robot @@ -80,4 +80,3 @@ Login Should Be Equal As Strings ${res["body"]} ${me["body"]} [Teardown] DELETE /auth/me - diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..4ba4057b --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,45 @@ +[tool.robotidy] +diff = false +overwrite = true +verbose = false +separator = "space" +spacecount = 2 +line_length = 120 +lineseparator = "native" +skip_gitignore = true +ignore_git_dir = true +configure = [ + "AddMissingEnd:enabled=True", + "NormalizeSeparators:enabled=True", + "DiscardEmptySections:enabled=True", + "MergeAndOrderSections:enabled=True", + "RemoveEmptySettings:enabled=True", + "ReplaceEmptyValues:enabled=True", + "ReplaceWithVAR:enabled=False", + "NormalizeAssignments:enabled=True", + "GenerateDocumentation:enabled=False", + "OrderSettings:enabled=True", + "OrderSettingsSection:enabled=True", + "NormalizeTags:enabled=True", + "OrderTags:enabled=False", + "RenameVariables:enabled=False", + "IndentNestedKeywords:enabled=False", + "AlignSettingsSection:enabled=True", + "AlignVariablesSection:enabled=True", + "AlignTemplatedTestCases:enabled=False", + "AlignTestCasesSection:enabled=False", + "AlignKeywordsSection:enabled=False", + "NormalizeNewLines:enabled=True", + "NormalizeSectionHeaderName:enabled=True", + "NormalizeSettingName:enabled=True", + "ReplaceRunKeywordIf:enabled=True", + "SplitTooLongLine:enabled=True", + "SmartSortKeywords:enabled=False", + "RenameTestCases:enabled=False", + "RenameKeywords:enabled=False", + "ReplaceReturns:enabled=True", + "ReplaceBreakContinue:enabled=True", + "InlineIf:enabled=True", + "Translate:enabled=False", + "NormalizeComments:enabled=True", +] diff --git a/shell.nix b/shell.nix index fa182ed2..d665739e 100644 --- a/shell.nix +++ b/shell.nix @@ -40,6 +40,7 @@ in go-migrate sqlc go-swag + robotframework-tidy ]; DOTNET_ROOT = "${dotnet}";