File indexing completed on 2024-05-19 05:02:31

0001 /*
0002    SPDX-FileCopyrightText: 2017-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "usertest.h"
0008 #include "ruqola_autotest_helper.h"
0009 #include "user.h"
0010 
0011 #include <QJsonObject>
0012 
0013 QTEST_GUILESS_MAIN(UserTest)
0014 
0015 UserTest::UserTest(QObject *parent)
0016     : QObject(parent)
0017 {
0018 }
0019 
0020 void UserTest::shouldHaveDefaultValue()
0021 {
0022     User u;
0023     QVERIFY(u.name().isEmpty());
0024     QVERIFY(u.userId().isEmpty());
0025     QCOMPARE(u.status(), User::PresenceStatus::PresenceOffline);
0026     QVERIFY(u.userName().isEmpty());
0027     QVERIFY(!u.isValid());
0028     QVERIFY(u.roles().isEmpty());
0029     QVERIFY(!u.userEmailsInfo().isValid());
0030     QVERIFY(!u.createdAt().isValid());
0031     QVERIFY(!u.lastLogin().isValid());
0032     QVERIFY(u.i18nRoles().isEmpty());
0033     QVERIFY(u.active());
0034     QVERIFY(u.bio().isEmpty());
0035     QVERIFY(u.nickName().isEmpty());
0036 }
0037 
0038 void UserTest::shouldBeValid()
0039 {
0040     User u;
0041 
0042     u.setName(QStringLiteral("foo"));
0043     QVERIFY(u.isValid());
0044 
0045     User u2;
0046     u2.setUserId(QStringLiteral("bla"));
0047     QVERIFY(!u2.isValid());
0048 
0049     User u3;
0050     u3.setUserName(QStringLiteral("dd"));
0051     QVERIFY(u3.isValid());
0052 
0053     User u4;
0054     u4.setUserId(QStringLiteral("d"));
0055     u4.setUserName(QStringLiteral("dd"));
0056     u4.setName(QStringLiteral("foo"));
0057     QVERIFY(u4.isValid());
0058 }
0059 
0060 void UserTest::shouldSetAndGetName()
0061 {
0062     User sampleUser;
0063     QString name = QStringLiteral("Maxwell");
0064     sampleUser.setName(name);
0065 
0066     QCOMPARE(sampleUser.name(), name);
0067 
0068     name = QStringLiteral("Maxwell_NEW");
0069     sampleUser.setName(name);
0070     QCOMPARE(sampleUser.name(), name);
0071 
0072     name = QStringLiteral("Maxwell_NEW");
0073     sampleUser.setName(name);
0074     QCOMPARE(sampleUser.name(), name);
0075 }
0076 
0077 void UserTest::shouldSetAndGetUserId()
0078 {
0079     User sampleUser;
0080     QString Id = QStringLiteral("RA1511ECE");
0081     sampleUser.setUserId(Id);
0082 
0083     QCOMPARE(sampleUser.userId(), Id);
0084 
0085     Id = QStringLiteral("RA1511ECE_NEW");
0086     sampleUser.setUserId(Id);
0087     QCOMPARE(sampleUser.userId(), Id);
0088 
0089     Id = QStringLiteral("RA1511ECE_NEW");
0090     sampleUser.setUserId(Id);
0091     QCOMPARE(sampleUser.userId(), Id);
0092 }
0093 
0094 void UserTest::shouldSetAndGetStatus()
0095 {
0096     User sampleUser;
0097 
0098     sampleUser.setStatus(User::PresenceStatus::PresenceOffline);
0099 
0100     QCOMPARE(sampleUser.status(), User::PresenceStatus::PresenceOffline);
0101 
0102     sampleUser.setStatus(User::PresenceStatus::PresenceOnline);
0103     QCOMPARE(sampleUser.status(), User::PresenceStatus::PresenceOnline);
0104 
0105     sampleUser.setStatus(User::PresenceStatus::PresenceOnline);
0106     QCOMPARE(sampleUser.status(), User::PresenceStatus::PresenceOnline);
0107 }
0108 
0109 void UserTest::shouldParseUser()
0110 {
0111     User sampleUser;
0112     QJsonObject object;
0113     QJsonObject fields;
0114     const QString name = QStringLiteral("Newton");
0115     const QString status = QStringLiteral("offline");
0116     fields.insert(QStringLiteral("name"), QJsonValue(name));
0117     fields.insert(QStringLiteral("status"), QJsonValue(status));
0118     object.insert(QStringLiteral("id"), QJsonValue(QLatin1String("RA151100ECE")));
0119     object.insert(QStringLiteral("fields"), fields);
0120 
0121     sampleUser.parseUser(object);
0122     QCOMPARE(sampleUser.name(), name);
0123     QCOMPARE(sampleUser.status(), User::PresenceStatus::PresenceOffline);
0124 }
0125 
0126 void UserTest::checkEqualsAndUnequalsOperator()
0127 {
0128     User sampleuser;
0129     User sampleuserOther;
0130     QString Id = QStringLiteral("RA151100ECE");
0131     QString name = QStringLiteral("Robert Segwick");
0132 
0133     sampleuser.setUserId(Id);
0134     sampleuser.setName(name);
0135     sampleuser.setStatus(User::PresenceStatus::PresenceOffline);
0136     QVERIFY(sampleuser != sampleuserOther);
0137 
0138     sampleuserOther.setUserId(Id);
0139     sampleuserOther.setName(name);
0140     sampleuserOther.setStatus(User::PresenceStatus::PresenceOffline);
0141     QVERIFY(sampleuser == sampleuserOther);
0142 
0143     sampleuserOther.setName(QStringLiteral("Robert Segwick_NEW"));
0144     QVERIFY(sampleuser != sampleuserOther);
0145 }
0146 
0147 void UserTest::shouldParseJson_data()
0148 {
0149     QTest::addColumn<QString>("fileName");
0150     QTest::addColumn<User>("expectedUser");
0151     User expected;
0152     expected.setName(QStringLiteral("Laurent M"));
0153     expected.setStatus(User::PresenceStatus::PresenceAway);
0154     expected.setUserId(QStringLiteral("yi2ucvqkdkxiTkyZ5"));
0155     expected.setUserName(QStringLiteral("laurent"));
0156     expected.setUtcOffset(1);
0157     QTest::newRow("user1") << QStringLiteral("adduser") << expected;
0158 }
0159 
0160 void UserTest::shouldParseJson()
0161 {
0162     QFETCH(QString, fileName);
0163     QFETCH(User, expectedUser);
0164     const QString originalJsonFile = QLatin1String(RUQOLA_DATA_DIR) + QLatin1String("/json/") + fileName + QLatin1String(".json");
0165     const QJsonObject fields = AutoTestHelper::loadJsonObject(originalJsonFile);
0166     User user;
0167     user.parseUser(fields);
0168     const bool equal = (user == expectedUser);
0169     if (!equal) {
0170         qDebug() << " current value " << user;
0171         qDebug() << " expected value " << expectedUser;
0172     }
0173     QVERIFY(equal);
0174 }
0175 
0176 void UserTest::shouldParseRestApiJson_data()
0177 {
0178     QTest::addColumn<QString>("fileName");
0179     QTest::addColumn<User>("expectedUser");
0180     {
0181         User expected;
0182         expected.setName(QStringLiteral("name_user"));
0183         expected.setStatus(User::PresenceStatus::PresenceOffline);
0184         expected.setUserId(QStringLiteral("BDFj6E7Z9RYucn8C"));
0185         expected.setUserName(QStringLiteral("username"));
0186         expected.setUtcOffset(0);
0187         expected.setRoles({QStringLiteral("user")}, {});
0188         QDateTime createdTime;
0189         createdTime.setDate(QDate(2020, 10, 05));
0190         createdTime.setTime(QTime(00, 48, 01, 903));
0191         expected.setCreatedAt(createdTime);
0192         expected.setLastLogin(QDateTime());
0193         QTest::newRow("userrestapi1") << QStringLiteral("userrestapi") << expected;
0194     }
0195     {
0196         User expected;
0197         expected.setName(QStringLiteral("Bla bla"));
0198         expected.setStatus(User::PresenceStatus::PresenceOnline);
0199         expected.setUserId(QStringLiteral("XQZAk3998f9hSNwh"));
0200         expected.setUserName(QStringLiteral("steffen"));
0201         expected.setUtcOffset(2);
0202         expected.setRoles({QStringLiteral("user"), QStringLiteral("admin")}, {});
0203         QDateTime createdTime;
0204         createdTime.setDate(QDate(2018, 01, 18));
0205         createdTime.setTime(QTime(12, 52, 50, 772));
0206         expected.setCreatedAt(createdTime);
0207         QDateTime lastLogin;
0208         lastLogin.setDate(QDate(2020, 10, 12));
0209         lastLogin.setTime(QTime(02, 26, 27, 324));
0210         expected.setLastLogin(lastLogin);
0211         User::UserEmailsInfo info;
0212         info.email = QStringLiteral("bla@kde.com");
0213         info.verified = true;
0214         expected.setUserEmailsInfo(info);
0215         expected.setNickName(QStringLiteral("TheReal"));
0216         QTest::newRow("userrestapi2") << QStringLiteral("userrestapi2") << expected;
0217     }
0218 }
0219 
0220 void UserTest::shouldParseRestApiJson()
0221 {
0222     QFETCH(QString, fileName);
0223     QFETCH(User, expectedUser);
0224     const QString originalJsonFile = QLatin1String(RUQOLA_DATA_DIR) + QLatin1String("/json/") + fileName + QLatin1String(".json");
0225     const QJsonObject fields = AutoTestHelper::loadJsonObject(originalJsonFile);
0226     User user;
0227     user.parseUserRestApi(fields, {});
0228     const bool equal = (user == expectedUser);
0229     if (!equal) {
0230         qDebug() << " current value " << user;
0231         qDebug() << " expected value " << expectedUser;
0232     }
0233     QVERIFY(equal);
0234 }
0235 
0236 void UserTest::shouldGetStatusIcon_data()
0237 {
0238     QTest::addColumn<User::PresenceStatus>("status");
0239     QTest::addColumn<QString>("iconFileName");
0240     QTest::newRow("online") << User::PresenceStatus::PresenceOnline << QStringLiteral("user-online");
0241     QTest::newRow("busy") << User::PresenceStatus::PresenceBusy << QStringLiteral("user-busy");
0242     QTest::newRow("away") << User::PresenceStatus::PresenceAway << QStringLiteral("user-away");
0243     QTest::newRow("offline") << User::PresenceStatus::PresenceOffline << QStringLiteral("user-offline");
0244     QTest::newRow("unknown") << User::PresenceStatus::Unknown << QStringLiteral("unknown");
0245 }
0246 
0247 void UserTest::shouldGetStatusIcon()
0248 {
0249     QFETCH(User::PresenceStatus, status);
0250     QFETCH(QString, iconFileName);
0251     User user;
0252     user.setStatus(status);
0253     QCOMPARE(user.iconFromStatus(), iconFileName);
0254 }
0255 
0256 #include "moc_usertest.cpp"