Commit 7e9e893b authored by Volker Krause's avatar Volker Krause
Browse files

Extract product model, and add unit test for it

parent 1a10d1b8
This diff is collapsed.
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef MODELTEST_H
#define MODELTEST_H
#include <QtCore/QObject>
#include <QtCore/QAbstractItemModel>
#include <QtCore/QStack>
class ModelTest : public QObject
{
Q_OBJECT
public:
ModelTest( QAbstractItemModel *model, QObject *parent = 0 );
private Q_SLOTS:
void nonDestructiveBasicTest();
void rowCount();
void columnCount();
void hasIndex();
void index();
void parent();
void data();
protected Q_SLOTS:
void runAllTests();
void layoutAboutToBeChanged();
void layoutChanged();
void rowsAboutToBeInserted( const QModelIndex &parent, int start, int end );
void rowsInserted( const QModelIndex & parent, int start, int end );
void rowsAboutToBeRemoved( const QModelIndex &parent, int start, int end );
void rowsRemoved( const QModelIndex & parent, int start, int end );
void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
void headerDataChanged(Qt::Orientation orientation, int start, int end);
private:
void checkChildren( const QModelIndex &parent, int currentDepth = 0 );
QAbstractItemModel *model;
struct Changing {
QModelIndex parent;
int oldSize;
QVariant last;
QVariant next;
};
QStack<Changing> insert;
QStack<Changing> remove;
bool fetchingMore;
QList<QPersistentModelIndex> changing;
};
#endif
......@@ -5,6 +5,8 @@ set(analyzer_lib_srcs
rest/restapi.cpp
rest/restclient.cpp
rest/serverinfo.cpp
model/productmodel.cpp
)
add_library(UserFeedbackAnalyzer STATIC ${analyzer_lib_srcs})
......@@ -20,7 +22,6 @@ set(analyzer_srcs
main.cpp
mainwindow.cpp
numericaggregationmodel.cpp
productmodel.cpp
ratioset.cpp
ratiosetaggregationmodel.cpp
sample.cpp
......
......@@ -25,12 +25,13 @@
#include "connectdialog.h"
#include "datamodel.h"
#include "numericaggregationmodel.h"
#include "productmodel.h"
#include "ratiosetaggregationmodel.h"
#include "surveydialog.h"
#include "surveymodel.h"
#include "timeaggregationmodel.h"
#include <model/productmodel.h>
#include <rest/restapi.h>
#include <rest/restclient.h>
#include <rest/serverinfo.h>
......
......@@ -33,8 +33,11 @@ ProductModel::~ProductModel() = default;
void ProductModel::setRESTClient(RESTClient* client)
{
Q_ASSERT(client);
m_restClient = client;
connect(m_restClient, &RESTClient::clientConnected, this, &ProductModel::reload);
if (m_restClient->isConnected())
reload();
}
void ProductModel::reload()
......
add_executable(productapitest productapitest.cpp)
target_link_libraries(productapitest Qt5::Test UserFeedbackAnalyzer)
add_test(NAME productapitest COMMAND productapitest)
add_executable(productmodeltest productmodeltest.cpp ${CMAKE_SOURCE_DIR}/3rdparty/qt/modeltest.cpp)
target_link_libraries(productmodeltest Qt5::Test UserFeedbackAnalyzer)
add_test(NAME productmodeltest COMMAND productmodeltest)
/*
Copyright (C) 2016 Volker Krause <vkrause@kde.org>
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU Library General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
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 Library 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 <http://www.gnu.org/licenses/>.
*/
#include <rest/restclient.h>
#include <model/productmodel.h>
#include <3rdparty/qt/modeltest.h>
#include <QDebug>
#include <QtTest/qtest.h>
#include <QObject>
#include <QSignalSpy>
#include <QStandardPaths>
using namespace UserFeedback::Analyzer;
class ProductModelTest : public QObject
{
Q_OBJECT
private:
ServerInfo testServer() const
{
// TODO this needs to be read from an external file, and the test needs to be skipped if not available
ServerInfo s;
s.setUrl(QUrl(QStringLiteral("https://feedback.volkerkrause.eu/")));
s.setUserName(QStringLiteral("orwell"));
s.setPassword(QStringLiteral("1984"));
return s;
}
private slots:
void initTestCase()
{
QStandardPaths::setTestModeEnabled(true);
}
void testProductModel()
{
RESTClient client;
client.connectToServer(testServer());
QVERIFY(client.isConnected());
ProductModel model;
ModelTest modelTest(&model);
model.setRESTClient(&client);
QSignalSpy spy(&model, &ProductModel::modelReset);
QVERIFY(spy.wait());
}
};
QTEST_MAIN(ProductModelTest)
#include "productmodeltest.moc"
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment