/*
* Copyright (C) 2015 Canonical, Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
#include "Greeter.h"
#include "MockController.h"
#include "UsersModel.h"
#include
#include
class GreeterUsersModelTest : public QObject
{
Q_OBJECT
private:
static int findName(QAbstractItemModel *model, const QString &name)
{
for (int i = 0; i < model->rowCount(QModelIndex()); i++) {
if (model->data(model->index(i, 0), QLightDM::UsersModel::NameRole).toString() == name) {
return i;
}
}
return -1;
}
static QString getStringValue(QAbstractItemModel *model, const QString &name, int role)
{
int i = findName(model, name);
return model->data(model->index(i, 0), role).toString();
}
void recreateModel()
{
delete model;
model = new UsersModel();
QVERIFY(model);
}
private Q_SLOTS:
void init()
{
recreateModel();
}
void cleanup()
{
QLightDM::MockController::instance()->reset();
}
void testMangleColor()
{
auto background = getStringValue(model, "color-background", QLightDM::UsersModel::BackgroundPathRole);
QVERIFY(background == "data:image/svg+xml,");
}
void testMangleEmptyName()
{
auto name = getStringValue(model, "empty-name", QLightDM::UsersModel::RealNameRole);
QVERIFY(name == "empty-name");
}
void testHasGuest()
{
// sanity check that it doesn't start already present
QCOMPARE(findName(model, QStringLiteral("*guest")), -1);
QLightDM::MockController::instance()->setHasGuestAccountHint(true);
int i = findName(model, QStringLiteral("*guest"));
QVERIFY(i >= 0);
auto realName = model->data(i, QLightDM::UsersModel::RealNameRole).toString();
QCOMPARE(realName, QStringLiteral("Guest Session"));
auto loggedIn = model->data(i, QLightDM::UsersModel::LoggedInRole).toBool();
QVERIFY(!loggedIn);
auto session = model->data(i, QLightDM::UsersModel::SessionRole).toString();
QCOMPARE(session, Greeter::instance()->defaultSessionHint());
}
void testHasManual()
{
// sanity check that it doesn't start already present
QCOMPARE(findName(model, QStringLiteral("*other")), -1);
QLightDM::MockController::instance()->setShowManualLoginHint(true);
int i = findName(model, QStringLiteral("*other"));
QVERIFY(i >= 0);
auto realName = model->data(i, QLightDM::UsersModel::RealNameRole).toString();
QCOMPARE(realName, QStringLiteral("Login"));
auto loggedIn = model->data(i, QLightDM::UsersModel::LoggedInRole).toBool();
QVERIFY(!loggedIn);
auto session = model->data(i, QLightDM::UsersModel::SessionRole).toString();
QCOMPARE(session, Greeter::instance()->defaultSessionHint());
}
void testEmptySession()
{
int i = findName(model, QStringLiteral("no-session"));
QVERIFY(i >= 0);
// A valid test as 'no-session' is instantiated with it's
// SessionRole as an empty string. This ensures something,
// hopefully sensical, is returned.
auto session = model->data(i, QLightDM::UsersModel::SessionRole);
QCOMPARE(session.toString().isEmpty(), false);
}
void testHideUsers()
{
QLightDM::MockController::instance()->setHideUsersHint(true);
QCOMPARE(model->count(), 1);
auto name = model->data(0, QLightDM::UsersModel::NameRole).toString();
QCOMPARE(name, QStringLiteral("*other"));
}
void testHideUsersWithGuest()
{
QLightDM::MockController::instance()->setHideUsersHint(true);
QLightDM::MockController::instance()->setHasGuestAccountHint(true);
QCOMPARE(model->count(), 1);
auto name = model->data(0, QLightDM::UsersModel::NameRole).toString();
QCOMPARE(name, QStringLiteral("*guest"));
}
void testCustomEntriesAreLast()
{
QLightDM::MockController::instance()->setHasGuestAccountHint(true);
QLightDM::MockController::instance()->setShowManualLoginHint(true);
QVERIFY(model->count() > 2);
int manualIndex = findName(model, QStringLiteral("*other"));
QCOMPARE(manualIndex, model->count() - 2);
int guestIndex = findName(model, QStringLiteral("*guest"));
QCOMPARE(guestIndex, model->count() - 1);
}
private:
UsersModel *model = nullptr;
};
QTEST_MAIN(GreeterUsersModelTest)
#include "usersmodel.moc"