diff options
author | Frédéric Guillot <fred@miniflux.net> | 2018-08-25 11:53:14 -0700 |
---|---|---|
committer | Frédéric Guillot <fred@miniflux.net> | 2018-08-25 11:55:47 -0700 |
commit | febce4f2e3a86da4171783fcc593b25a807c3da8 (patch) | |
tree | 3e15ba526680fda44620bc81a49f2d844a77a087 /tests/user_test.go | |
parent | df2bebaf3dc9ab46c03883d795ae6637faa4a2c1 (diff) |
Split integration tests into multiple files
Diffstat (limited to 'tests/user_test.go')
-rw-r--r-- | tests/user_test.go | 380 |
1 files changed, 380 insertions, 0 deletions
diff --git a/tests/user_test.go b/tests/user_test.go new file mode 100644 index 0000000..85b6ebd --- /dev/null +++ b/tests/user_test.go @@ -0,0 +1,380 @@ +// Copyright 2018 Frédéric Guillot. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +// +build integration + +package tests + +import ( + "testing" + + miniflux "miniflux.app/client" +) + +func TestWithWrongCredentials(t *testing.T) { + client := miniflux.New(testBaseURL, "invalid", "invalid") + _, err := client.Users() + if err == nil { + t.Fatal(`Using bad credentials should raise an error`) + } + + if err != miniflux.ErrNotAuthorized { + t.Fatal(`A "Not Authorized" error should be raised`) + } +} + +func TestGetCurrentLoggedUser(t *testing.T) { + client := miniflux.New(testBaseURL, testAdminUsername, testAdminPassword) + user, err := client.Me() + if err != nil { + t.Fatal(err) + } + + if user.ID == 0 { + t.Fatalf(`Invalid userID, got %q`, user.ID) + } + + if user.Username != testAdminUsername { + t.Fatalf(`Invalid username, got %q`, user.Username) + } +} + +func TestGetUsers(t *testing.T) { + client := miniflux.New(testBaseURL, testAdminUsername, testAdminPassword) + users, err := client.Users() + if err != nil { + t.Fatal(err) + } + + if len(users) == 0 { + t.Fatal("The list of users is empty") + } + + if users[0].ID == 0 { + t.Fatalf(`Invalid userID, got "%v"`, users[0].ID) + } + + if users[0].Username != testAdminUsername { + t.Fatalf(`Invalid username, got "%v" instead of "%v"`, users[0].Username, testAdminUsername) + } + + if users[0].Password != "" { + t.Fatalf(`Invalid password, got "%v"`, users[0].Password) + } + + if users[0].Language != "en_US" { + t.Fatalf(`Invalid language, got "%v"`, users[0].Language) + } + + if users[0].Theme != "default" { + t.Fatalf(`Invalid theme, got "%v"`, users[0].Theme) + } + + if users[0].Timezone != "UTC" { + t.Fatalf(`Invalid timezone, got "%v"`, users[0].Timezone) + } + + if !users[0].IsAdmin { + t.Fatalf(`Invalid role, got "%v"`, users[0].IsAdmin) + } +} + +func TestCreateStandardUser(t *testing.T) { + username := getRandomUsername() + client := miniflux.New(testBaseURL, testAdminUsername, testAdminPassword) + user, err := client.CreateUser(username, testStandardPassword, false) + if err != nil { + t.Fatal(err) + } + + if user.ID == 0 { + t.Fatalf(`Invalid userID, got "%v"`, user.ID) + } + + if user.Username != username { + t.Fatalf(`Invalid username, got "%v" instead of "%v"`, user.Username, username) + } + + if user.Password != "" { + t.Fatalf(`Invalid password, got "%v"`, user.Password) + } + + if user.Language != "en_US" { + t.Fatalf(`Invalid language, got "%v"`, user.Language) + } + + if user.Theme != "default" { + t.Fatalf(`Invalid theme, got "%v"`, user.Theme) + } + + if user.Timezone != "UTC" { + t.Fatalf(`Invalid timezone, got "%v"`, user.Timezone) + } + + if user.IsAdmin { + t.Fatalf(`Invalid role, got "%v"`, user.IsAdmin) + } + + if user.LastLoginAt != nil { + t.Fatalf(`Invalid last login date, got "%v"`, user.LastLoginAt) + } +} + +func TestRemoveUser(t *testing.T) { + username := getRandomUsername() + client := miniflux.New(testBaseURL, testAdminUsername, testAdminPassword) + user, err := client.CreateUser(username, testStandardPassword, false) + if err != nil { + t.Fatal(err) + } + + if err := client.DeleteUser(user.ID); err != nil { + t.Fatalf(`Unable to remove user: "%v"`, err) + } +} + +func TestGetUserByID(t *testing.T) { + username := getRandomUsername() + client := miniflux.New(testBaseURL, testAdminUsername, testAdminPassword) + user, err := client.CreateUser(username, testStandardPassword, false) + if err != nil { + t.Fatal(err) + } + + _, err = client.UserByID(99999) + if err == nil { + t.Fatal(`Should returns a 404`) + } + + user, err = client.UserByID(user.ID) + if err != nil { + t.Fatal(err) + } + + if user.ID == 0 { + t.Fatalf(`Invalid userID, got "%v"`, user.ID) + } + + if user.Username != username { + t.Fatalf(`Invalid username, got "%v" instead of "%v"`, user.Username, username) + } + + if user.Password != "" { + t.Fatalf(`Invalid password, got "%v"`, user.Password) + } + + if user.Language != "en_US" { + t.Fatalf(`Invalid language, got "%v"`, user.Language) + } + + if user.Theme != "default" { + t.Fatalf(`Invalid theme, got "%v"`, user.Theme) + } + + if user.Timezone != "UTC" { + t.Fatalf(`Invalid timezone, got "%v"`, user.Timezone) + } + + if user.IsAdmin { + t.Fatalf(`Invalid role, got "%v"`, user.IsAdmin) + } + + if user.LastLoginAt != nil { + t.Fatalf(`Invalid last login date, got "%v"`, user.LastLoginAt) + } +} + +func TestGetUserByUsername(t *testing.T) { + username := getRandomUsername() + client := miniflux.New(testBaseURL, testAdminUsername, testAdminPassword) + user, err := client.CreateUser(username, testStandardPassword, false) + if err != nil { + t.Fatal(err) + } + + _, err = client.UserByUsername("missinguser") + if err == nil { + t.Fatal(`Should returns a 404`) + } + + user, err = client.UserByUsername(username) + if err != nil { + t.Fatal(err) + } + + if user.ID == 0 { + t.Fatalf(`Invalid userID, got "%v"`, user.ID) + } + + if user.Username != username { + t.Fatalf(`Invalid username, got "%v" instead of "%v"`, user.Username, username) + } + + if user.Password != "" { + t.Fatalf(`Invalid password, got "%v"`, user.Password) + } + + if user.Language != "en_US" { + t.Fatalf(`Invalid language, got "%v"`, user.Language) + } + + if user.Theme != "default" { + t.Fatalf(`Invalid theme, got "%v"`, user.Theme) + } + + if user.Timezone != "UTC" { + t.Fatalf(`Invalid timezone, got "%v"`, user.Timezone) + } + + if user.IsAdmin { + t.Fatalf(`Invalid role, got "%v"`, user.IsAdmin) + } + + if user.LastLoginAt != nil { + t.Fatalf(`Invalid last login date, got "%v"`, user.LastLoginAt) + } +} + +func TestUpdateUserTheme(t *testing.T) { + username := getRandomUsername() + client := miniflux.New(testBaseURL, testAdminUsername, testAdminPassword) + user, err := client.CreateUser(username, testStandardPassword, false) + if err != nil { + t.Fatal(err) + } + + theme := "black" + user, err = client.UpdateUser(user.ID, &miniflux.UserModification{Theme: &theme}) + if err != nil { + t.Fatal(err) + } + + if user.Theme != theme { + t.Fatalf(`Unable to update user Theme: got "%v" instead of "%v"`, user.Theme, theme) + } +} + +func TestUpdateUserThemeWithInvalidValue(t *testing.T) { + username := getRandomUsername() + client := miniflux.New(testBaseURL, testAdminUsername, testAdminPassword) + user, err := client.CreateUser(username, testStandardPassword, false) + if err != nil { + t.Fatal(err) + } + + theme := "something that doesn't exists" + _, err = client.UpdateUser(user.ID, &miniflux.UserModification{Theme: &theme}) + if err == nil { + t.Fatal(`Updating a user Theme with an invalid value should raise an error`) + } +} + +func TestCannotCreateDuplicateUser(t *testing.T) { + username := getRandomUsername() + client := miniflux.New(testBaseURL, testAdminUsername, testAdminPassword) + _, err := client.CreateUser(username, testStandardPassword, false) + if err != nil { + t.Fatal(err) + } + + _, err = client.CreateUser(username, testStandardPassword, false) + if err == nil { + t.Fatal(`Duplicate users should not be allowed`) + } +} + +func TestCannotListUsersAsNonAdmin(t *testing.T) { + username := getRandomUsername() + client := miniflux.New(testBaseURL, testAdminUsername, testAdminPassword) + _, err := client.CreateUser(username, testStandardPassword, false) + if err != nil { + t.Fatal(err) + } + + client = miniflux.New(testBaseURL, username, testStandardPassword) + _, err = client.Users() + if err == nil { + t.Fatal(`Standard users should not be able to list any users`) + } + + if err != miniflux.ErrForbidden { + t.Fatal(`A "Forbidden" error should be raised`) + } +} + +func TestCannotGetUserAsNonAdmin(t *testing.T) { + username := getRandomUsername() + client := miniflux.New(testBaseURL, testAdminUsername, testAdminPassword) + user, err := client.CreateUser(username, testStandardPassword, false) + if err != nil { + t.Fatal(err) + } + + client = miniflux.New(testBaseURL, username, testStandardPassword) + _, err = client.UserByID(user.ID) + if err == nil { + t.Fatal(`Standard users should not be able to get any users`) + } + + if err != miniflux.ErrForbidden { + t.Fatal(`A "Forbidden" error should be raised`) + } +} + +func TestCannotUpdateUserAsNonAdmin(t *testing.T) { + username := getRandomUsername() + client := miniflux.New(testBaseURL, testAdminUsername, testAdminPassword) + user, err := client.CreateUser(username, testStandardPassword, false) + if err != nil { + t.Fatal(err) + } + + client = miniflux.New(testBaseURL, username, testStandardPassword) + _, err = client.UpdateUser(user.ID, &miniflux.UserModification{}) + if err == nil { + t.Fatal(`Standard users should not be able to update any users`) + } + + if err != miniflux.ErrForbidden { + t.Fatal(`A "Forbidden" error should be raised`) + } +} + +func TestCannotCreateUserAsNonAdmin(t *testing.T) { + username := getRandomUsername() + client := miniflux.New(testBaseURL, testAdminUsername, testAdminPassword) + _, err := client.CreateUser(username, testStandardPassword, false) + if err != nil { + t.Fatal(err) + } + + client = miniflux.New(testBaseURL, username, testStandardPassword) + _, err = client.CreateUser(username, testStandardPassword, false) + if err == nil { + t.Fatal(`Standard users should not be able to create users`) + } + + if err != miniflux.ErrForbidden { + t.Fatal(`A "Forbidden" error should be raised`) + } +} + +func TestCannotDeleteUserAsNonAdmin(t *testing.T) { + username := getRandomUsername() + client := miniflux.New(testBaseURL, testAdminUsername, testAdminPassword) + user, err := client.CreateUser(username, testStandardPassword, false) + if err != nil { + t.Fatal(err) + } + + client = miniflux.New(testBaseURL, username, testStandardPassword) + err = client.DeleteUser(user.ID) + if err == nil { + t.Fatal(`Standard users should not be able to remove any users`) + } + + if err != miniflux.ErrForbidden { + t.Fatal(`A "Forbidden" error should be raised`) + } +} |