diff --git a/login_server/src/cpp/JSONInterface/JsonCheckUsername.cpp b/login_server/src/cpp/JSONInterface/JsonCheckUsername.cpp index cf19ae69d..f05f503ee 100644 --- a/login_server/src/cpp/JSONInterface/JsonCheckUsername.cpp +++ b/login_server/src/cpp/JSONInterface/JsonCheckUsername.cpp @@ -23,8 +23,7 @@ Poco::JSON::Object* JsonCheckUsername::handle(Poco::Dynamic::Var params) auto group_alias_obj = paramJsonObject->get("group_alias"); try { - paramJsonObject->get("username").convert(username); - + if (!username_obj.isEmpty()) { username_obj.convert(username); } @@ -38,7 +37,7 @@ Poco::JSON::Object* JsonCheckUsername::handle(Poco::Dynamic::Var params) } catch (Poco::Exception& ex) { - return stateError("username not found or invalid"); + return stateError("Poco Exception", ex.displayText()); } } diff --git a/login_server/src/cpp/test/JSONInterface/TestJsonCheckUsername.cpp b/login_server/src/cpp/test/JSONInterface/TestJsonCheckUsername.cpp new file mode 100644 index 000000000..d399689ee --- /dev/null +++ b/login_server/src/cpp/test/JSONInterface/TestJsonCheckUsername.cpp @@ -0,0 +1,123 @@ +#include "gtest/gtest.h" + +#include "JSONInterface/JsonCheckUsername.h" + +TEST(TestJsonCheckUsername, InvalidGroupAlias) +{ + JsonCheckUsername jsonCall; + Poco::JSON::Object::Ptr params = new Poco::JSON::Object; + params->set("group_alias", "robert"); + auto result = jsonCall.handle(params); + auto msg = result->get("msg"); + ASSERT_FALSE(msg.isEmpty()); + ASSERT_TRUE(msg.isString()); + ASSERT_EQ(msg.toString(), "unknown group"); + + delete result; +} + +TEST(TestJsonCheckUsername, InvalidGroupId) +{ + JsonCheckUsername jsonCall; + Poco::JSON::Object::Ptr params = new Poco::JSON::Object; + params->set("group_id", "4"); + auto result = jsonCall.handle(params); + auto msg = result->get("msg"); + ASSERT_FALSE(msg.isEmpty()); + ASSERT_TRUE(msg.isString()); + ASSERT_EQ(msg.toString(), "unknown group"); + + delete result; +} + +TEST(TestJsonCheckUsername, ValidGroupAlias) +{ + JsonCheckUsername jsonCall; + Poco::JSON::Object::Ptr params = new Poco::JSON::Object; + params->set("group_alias", "gdd1"); + auto result = jsonCall.handle(params); + auto state = result->get("state"); + ASSERT_FALSE(state.isEmpty()); + ASSERT_TRUE(state.isString()); + ASSERT_EQ(state.toString(), "success"); + + auto group_id = result->get("group_id"); + ASSERT_FALSE(group_id.isEmpty()); + ASSERT_TRUE(group_id.isInteger()); + int group_id_int = 0; + group_id.convert(group_id_int); + ASSERT_EQ(group_id_int, 1); + + delete result; +} + +TEST(TestJsonCheckUsername, UsernameWithoutGroup) +{ + JsonCheckUsername jsonCall; + Poco::JSON::Object::Ptr params = new Poco::JSON::Object; + params->set("username", "maxi"); + auto result = jsonCall.handle(params); + + auto state = result->get("state"); + ASSERT_FALSE(state.isEmpty()); + ASSERT_TRUE(state.isString()); + ASSERT_EQ(state.toString(), "error"); + + auto msg = result->get("msg"); + ASSERT_FALSE(msg.isEmpty()); + ASSERT_TRUE(msg.isString()); + ASSERT_EQ(msg.toString(), "no group given"); + + + delete result; +} + +TEST(TestJsonCheckUsername, ExistingUsername) +{ + JsonCheckUsername jsonCall; + Poco::JSON::Object::Ptr params = new Poco::JSON::Object; + params->set("username", "Erfinder"); + params->set("group_id", 1); + auto result = jsonCall.handle(params); + + auto state = result->get("state"); + ASSERT_FALSE(state.isEmpty()); + ASSERT_TRUE(state.isString()); + ASSERT_EQ(state.toString(), "warning"); + + auto msg = result->get("msg"); + ASSERT_FALSE(msg.isEmpty()); + ASSERT_TRUE(msg.isString()); + ASSERT_EQ(msg.toString(), "username already in use"); +} + +TEST(TestJsonCheckUsername, NewUsername) +{ + JsonCheckUsername jsonCall; + Poco::JSON::Object::Ptr params = new Poco::JSON::Object; + params->set("username", "Maxi"); + params->set("group_id", 1); + auto result = jsonCall.handle(params); + + auto state = result->get("state"); + ASSERT_FALSE(state.isEmpty()); + ASSERT_TRUE(state.isString()); + ASSERT_EQ(state.toString(), "success"); +} + +TEST(TestJsonCheckUsername, UsernameExistInOtherGroup) +{ + JsonCheckUsername jsonCall; + Poco::JSON::Object::Ptr params = new Poco::JSON::Object; + params->set("username", "Erfinder"); + params->set("group_id", 2); + auto result = jsonCall.handle(params); + + auto state = result->get("state"); + ASSERT_FALSE(state.isEmpty()); + ASSERT_TRUE(state.isString()); + ASSERT_EQ(state.toString(), "success"); + +} + +