diff --git a/services/user/tests/user_test.go b/services/user/tests/user_test.go index 5ed70d67..c667b751 100644 --- a/services/user/tests/user_test.go +++ b/services/user/tests/user_test.go @@ -44,7 +44,7 @@ func TestMain(m *testing.M) { } /* - Initialize database with test user info +Initialize database with test user info */ func SetupTestDB(t *testing.T) { err := db.Insert("info", &models.UserInfo{ @@ -69,7 +69,7 @@ func SetupTestDB(t *testing.T) { } /* - Initialize db for sortby filter tests +Initialize db for sortby filter tests */ func SetupFilterTestDB(t *testing.T) { err := db.Insert("info", &models.UserInfo{ @@ -113,7 +113,7 @@ func SetupFilterTestDB(t *testing.T) { } /* - Initialize db for pagination, filter tests +Initialize db for pagination, filter tests */ func SetupPaginationDB(t *testing.T) { err := db.Insert("info", &models.UserInfo{ @@ -152,7 +152,7 @@ func SetupPaginationDB(t *testing.T) { } /* - Drop test db +Drop test db */ func CleanupTestDB(t *testing.T) { err := db.DropDatabase(nil) @@ -163,7 +163,7 @@ func CleanupTestDB(t *testing.T) { } /* - Service level test for getting user info from db +Service level test for getting user info from db */ func TestGetUserInfoService(t *testing.T) { SetupTestDB(t) @@ -188,7 +188,7 @@ func TestGetUserInfoService(t *testing.T) { } /* - Service level test for setting user info in the db +Service level test for setting user info in the db */ func TestSetUserInfoService(t *testing.T) { SetupTestDB(t) @@ -223,7 +223,7 @@ func TestSetUserInfoService(t *testing.T) { } /* - Service level test for getting filtered user info from db +Service level test for getting filtered user info from db */ func TestGetFilteredUserInfoService(t *testing.T) { SetupTestDB(t) @@ -261,7 +261,7 @@ func TestGetFilteredUserInfoService(t *testing.T) { } /* - Test Sortby parameter +Test Sortby parameter */ func TestGetFilteredUserInfoWithSortingService(t *testing.T) { SetupFilterTestDB(t) @@ -350,7 +350,7 @@ func TestGetFilteredUserInfoWithSortingService(t *testing.T) { } /* - Test Pagination parameter +Test Pagination parameter */ func TestGetFilteredUserInfoServicePagination(t *testing.T) { SetupPaginationDB(t) @@ -472,7 +472,7 @@ func TestGetFilteredUserInfoServicePagination(t *testing.T) { } /* - Service level test for generating QR code URI +Service level test for generating QR code URI */ func TestGetQrInfo(t *testing.T) { SetupTestDB(t) diff --git a/tests/e2e/user_test/filter_profile_test.go b/tests/e2e/user_test/filter_profile_test.go new file mode 100644 index 00000000..ff3f63e6 --- /dev/null +++ b/tests/e2e/user_test/filter_profile_test.go @@ -0,0 +1,249 @@ +package tests + +import ( + "context" + "net/http" + "reflect" + "testing" + + "github.com/HackIllinois/api/services/user/models" + user_models "github.com/HackIllinois/api/services/user/models" +) + +var user_info_1 user_models.UserInfo +var user_info_2 user_models.UserInfo +var user_info_3 user_models.UserInfo +var user_info_4 user_models.UserInfo + +func AddTestDataToDatabase() { + user_info_1 = user_models.UserInfo{ + ID: "12345", + Username: "johnsmith", + FirstName: "John", + LastName: "Smith", + Email: "john.smith@aol.com", + } + user_info_2 = user_models.UserInfo{ + ID: "12345", + Username: "hello", + FirstName: "John", + LastName: "Smith", + Email: "Hi.Hey@aol.com", + } + + user_info_3 = user_models.UserInfo{ + ID: "54321", + Username: "james", + FirstName: "James", + LastName: "Names", + Email: "James.Names@aol.com", + } + user_info_4 = user_models.UserInfo{ + ID: "54321", + Username: "A", + FirstName: "Aaa", + LastName: "Bbbbb", + Email: "a.b@aol.com", + } + client.Database(user_db_name).Collection("info").InsertOne(context.Background(), user_info_1) + client.Database(user_db_name).Collection("info").InsertOne(context.Background(), user_info_2) + client.Database(user_db_name).Collection("info").InsertOne(context.Background(), user_info_3) + client.Database(user_db_name).Collection("info").InsertOne(context.Background(), user_info_4) +} + +func ClearDatabase() { + client.Database(user_db_name).Drop(context.Background()) +} + +func TestGetFilterByID(t *testing.T) { + AddTestDataToDatabase() + defer ClearDatabase() + + endpoint_address := "/user/filter/?id=12345" + + recieved_profile := user_models.FilteredUsers{} + + response, err := admin_client.New().Get(endpoint_address).ReceiveSuccess(&recieved_profile) + + expected_info := models.FilteredUsers{ + []models.UserInfo{ + user_info_1, + user_info_2, + }, + } + + if err != nil { + t.Errorf("Unable to make request") + } + if response.StatusCode != http.StatusOK { + t.Errorf("Request returned HTTP error %d", response.StatusCode) + } + if !reflect.DeepEqual(recieved_profile, expected_info) { + t.Errorf("Wrong user info. Expected %v, got %v", expected_info, recieved_profile) + } +} + +func TestGetFilterByUserName(t *testing.T) { + AddTestDataToDatabase() + defer ClearDatabase() + + endpoint_address := "/user/filter/?username=johnsmith" + + recieved_profile := user_models.FilteredUsers{} + + response, err := admin_client.New().Get(endpoint_address).ReceiveSuccess(&recieved_profile) + + expected_info := models.FilteredUsers{ + []models.UserInfo{ + user_info_1, + }, + } + + if err != nil { + t.Errorf("Unable to make request") + } + if response.StatusCode != http.StatusOK { + t.Errorf("Request returned HTTP error %d", response.StatusCode) + } + if !reflect.DeepEqual(recieved_profile, expected_info) { + t.Errorf("Wrong user info. Expected %v, got %v", expected_info, recieved_profile) + } +} + +func TestGetFilterByFirstName(t *testing.T) { + AddTestDataToDatabase() + defer ClearDatabase() + + endpoint_address := "/user/filter/?firstName=John" + + recieved_profile := user_models.FilteredUsers{} + + response, err := admin_client.New().Get(endpoint_address).ReceiveSuccess(&recieved_profile) + + expected_info := models.FilteredUsers{ + []models.UserInfo{ + user_info_1, + user_info_2, + }, + } + + if err != nil { + t.Errorf("Unable to make request") + } + if response.StatusCode != http.StatusOK { + t.Errorf("Request returned HTTP error %d", response.StatusCode) + } + if !reflect.DeepEqual(recieved_profile, expected_info) { + t.Errorf("Wrong user info. Expected %v, got %v", expected_info, recieved_profile) + } +} + +func TestGetFilterByLastName(t *testing.T) { + AddTestDataToDatabase() + defer ClearDatabase() + + endpoint_address := "/user/filter/?lastName=Smith" + + recieved_profile := user_models.FilteredUsers{} + + response, err := admin_client.New().Get(endpoint_address).ReceiveSuccess(&recieved_profile) + + expected_info := models.FilteredUsers{ + []models.UserInfo{ + user_info_1, + user_info_2, + }, + } + + if err != nil { + t.Errorf("Unable to make request") + } + if response.StatusCode != http.StatusOK { + t.Errorf("Request returned HTTP error %d", response.StatusCode) + } + if !reflect.DeepEqual(recieved_profile, expected_info) { + t.Errorf("Wrong user info. Expected %v, got %v", expected_info, recieved_profile) + } +} + +func TestGetFilterByEmail(t *testing.T) { + AddTestDataToDatabase() + defer ClearDatabase() + + endpoint_address := "/user/filter/?email=James.Names@aol.com" + + recieved_profile := user_models.FilteredUsers{} + + response, err := admin_client.New().Get(endpoint_address).ReceiveSuccess(&recieved_profile) + + expected_info := models.FilteredUsers{ + []models.UserInfo{ + user_info_3, + }, + } + + if err != nil { + t.Errorf("Unable to make request") + } + if response.StatusCode != http.StatusOK { + t.Errorf("Request returned HTTP error %d", response.StatusCode) + } + if !reflect.DeepEqual(recieved_profile, expected_info) { + t.Errorf("Wrong user info. Expected %v, got %v", expected_info, recieved_profile) + } +} + +func TestGetFilterLimit(t *testing.T) { + AddTestDataToDatabase() + defer ClearDatabase() + + endpoint_address := "/user/filter/?firstName=John&p=1&limit=1" + + recieved_profile := user_models.FilteredUsers{} + + response, err := admin_client.New().Get(endpoint_address).ReceiveSuccess(&recieved_profile) + + expected_info := models.FilteredUsers{ + []models.UserInfo{ + user_info_1, + }, + } + + if err != nil { + t.Errorf("Unable to make request") + } + if response.StatusCode != http.StatusOK { + t.Errorf("Request returned HTTP error %d", response.StatusCode) + } + if !reflect.DeepEqual(recieved_profile, expected_info) { + t.Errorf("Wrong user info. Expected %v, got %v", expected_info, recieved_profile) + } +} + +func TestGetFilterOrder(t *testing.T) { + AddTestDataToDatabase() + defer ClearDatabase() + + endpoint_address := "/user/filter/?id=54321&sortby=firstName,lastName" + + recieved_profile := user_models.FilteredUsers{} + + response, err := admin_client.New().Get(endpoint_address).ReceiveSuccess(&recieved_profile) + + expected_info := models.FilteredUsers{ + []models.UserInfo{ + user_info_4, + user_info_3, + }, + } + + if err != nil { + t.Errorf("Unable to make request") + } + if response.StatusCode != http.StatusOK { + t.Errorf("Request returned HTTP error %d", response.StatusCode) + } + if !reflect.DeepEqual(recieved_profile, expected_info) { + t.Errorf("Wrong user info. Expected %v, got %v", expected_info, recieved_profile) + } +} diff --git a/tests/e2e/user_test/get_user_id_test.go b/tests/e2e/user_test/get_user_id_test.go new file mode 100644 index 00000000..cff3657c --- /dev/null +++ b/tests/e2e/user_test/get_user_id_test.go @@ -0,0 +1,38 @@ +package tests + +import ( + "context" + "fmt" + "net/http" + "reflect" + "testing" + + user_models "github.com/HackIllinois/api/services/user/models" +) + +func TestUserProfile(t *testing.T) { + user_info := user_models.UserInfo{ + ID: "12345", + Username: "johnsmith", + FirstName: "John", + LastName: "Smith", + Email: "john.smith@aol.com", + } + + client.Database(user_db_name).Collection("info").InsertOne(context.Background(), user_info) + + endpoint_address := fmt.Sprintf("/user/%s/", "12345") + + recieved_user := user_models.UserInfo{} + response, err := admin_client.New().Get(endpoint_address).ReceiveSuccess(&recieved_user) + + if err != nil { + t.Errorf("Unable to make request") + } + if response.StatusCode != http.StatusOK { + t.Errorf("Request returned HTTP error %d", response.StatusCode) + } + if !reflect.DeepEqual(recieved_user, user_info) { + t.Errorf("Wrong user info. Expected %v, got %v", user_info, recieved_user) + } +} diff --git a/tests/e2e/user_test/user_test.go b/tests/e2e/user_test/user_test.go new file mode 100644 index 00000000..243a5466 --- /dev/null +++ b/tests/e2e/user_test/user_test.go @@ -0,0 +1,43 @@ +package tests + +import ( + "context" + "fmt" + "os" + "testing" + + "github.com/HackIllinois/api/common/configloader" + "github.com/HackIllinois/api/tests/common" + "github.com/dghubble/sling" + "go.mongodb.org/mongo-driver/mongo" +) + +var admin_client *sling.Sling +var client *mongo.Client +var user_db_name string +var unauthenticated_client *sling.Sling + +func TestMain(m *testing.M) { + + cfg, err := configloader.Load(os.Getenv("HI_CONFIG")) + + if err != nil { + fmt.Printf("ERROR: %v\n", err) + os.Exit(1) + } + + admin_client = common.GetSlingClient("Admin") + unauthenticated_client = sling.New().Base("http://localhost:8000").Client(nil).Add("Authorization", "FAKE_TOKEN") + + client = common.GetLocalMongoSession() + + user_db_name, err = cfg.Get("USER_DB_NAME") + if err != nil { + fmt.Printf("ERROR: %v\n", err) + os.Exit(1) + } + client.Database(user_db_name).Drop(context.Background()) + + return_code := m.Run() + os.Exit(return_code) +}