/*! * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany */ #include "ReaderDriverModel.h" #include "Env.h" #include "MockReaderConfiguration.h" #include "MockReaderDetector.h" #include "ReaderManager.h" #include "ResourceLoader.h" #include #include using namespace governikus; class MockReaderManager : public ReaderManager { Q_OBJECT private: const QVector& mReaderInfos; public: MockReaderManager(const QVector& pReaderInfos); QVector getReaderInfos(const ReaderFilter& pFilter = ReaderFilter()) const override; }; MockReaderManager::MockReaderManager(const QVector& pReaderInfos) : mReaderInfos(pReaderInfos) { } QVector MockReaderManager::getReaderInfos(const ReaderFilter& pFilter) const { Q_UNUSED(pFilter); return mReaderInfos; } class test_ReaderDriverModel : public QObject { Q_OBJECT public: test_ReaderDriverModel() : mMockReaderConfiguration() , mUsbIds() , mMockReaderDetector(mUsbIds) , mReaderInfos() , mMockReaderManager(mReaderInfos) { Env::set(ReaderDetector::staticMetaObject, &mMockReaderDetector); Env::set(ReaderManager::staticMetaObject, &mMockReaderManager); } private: QScopedPointer mMockReaderConfiguration; QVector mUsbIds; MockReaderDetector mMockReaderDetector; QVector mReaderInfos; MockReaderManager mMockReaderManager; private Q_SLOTS: void initTestCase() { ResourceLoader::getInstance().init(); } void init() { mMockReaderConfiguration.reset(new MockReaderConfiguration()); Env::set(ReaderConfiguration::staticMetaObject, mMockReaderConfiguration.data()); mUsbIds.clear(); mReaderInfos.clear(); } void cleanup() { mMockReaderConfiguration.reset(); } void test_empty() { mMockReaderConfiguration->clearReaderConfiguration(); ReaderDriverModel readerDriverModel; QCOMPARE(readerDriverModel.rowCount(), 0); } void test_01_settings() { ReaderDriverModel readerDriverModel; QCOMPARE(readerDriverModel.rowCount(), 0); } void test_02_usbId() { #if defined(Q_OS_FREEBSD) QSKIP("No driver available for UsbId(0x0C4B, 0x0501) on FreeBSD"); #endif mUsbIds += UsbId(0x0C4B, 0x0501); // REINER SCT cyberJack RFID komfort ReaderDriverModel readerDriverModel; QCOMPARE(readerDriverModel.rowCount(), 1); const auto& index = readerDriverModel.index(0, ReaderDriverModel::ColumnId::ReaderStatus, QModelIndex()); QCOMPARE(readerDriverModel.data(index).toString(), tr("No driver installed")); } void test_03_usbId_unknown() { mUsbIds += UsbId(0x1, 0x2); // Unknown ReaderDriverModel readerDriverModel; QCOMPARE(readerDriverModel.rowCount(), 0); } void test_04_usbId_readerManager_equal() { #if defined(Q_OS_FREEBSD) QSKIP("No driver available for UsbId(0x0D46, 0x301D) on FreeBSD"); #endif mUsbIds += UsbId(0x0D46, 0x301D); // KOBIL Systems IDToken mReaderInfos += ReaderInfo("KOBIL Systems IDToken (NS1252PT188E1) 00 00", ReaderManagerPlugInType::PCSC); ReaderDriverModel readerDriverModel; QCOMPARE(readerDriverModel.rowCount(), 1); const auto& index = readerDriverModel.index(0, ReaderDriverModel::ColumnId::ReaderStatus, QModelIndex()); QCOMPARE(readerDriverModel.data(index).toString(), tr("Driver installed")); } void test_05_usbId_readerManager_different() { #if defined(Q_OS_FREEBSD) QSKIP("No driver available for UsbId(0x0C4B, 0x0501) on FreeBSD"); #endif mUsbIds += UsbId(0x0C4B, 0x0501); // REINER SCT cyberJack RFID komfort mUsbIds += UsbId(0x0D46, 0x301D); // KOBIL Systems IDToken mReaderInfos += ReaderInfo("KOBIL Systems IDToken (NS1252PT188E1) 00 00", ReaderManagerPlugInType::PCSC); QModelIndex index; ReaderDriverModel readerDriverModel; QCOMPARE(readerDriverModel.rowCount(), 2); index = readerDriverModel.index(0, ReaderDriverModel::ColumnId::ReaderStatus, QModelIndex()); QCOMPARE(readerDriverModel.data(index).toString(), tr("Driver installed")); index = readerDriverModel.index(1, ReaderDriverModel::ColumnId::ReaderStatus, QModelIndex()); QCOMPARE(readerDriverModel.data(index).toString(), tr("No driver installed")); } void test_06_settings_readerManager_unknown() { mReaderInfos += ReaderInfo("Governikus Special Reader", ReaderManagerPlugInType::PCSC); ReaderDriverModel readerDriverModel; QCOMPARE(readerDriverModel.rowCount(), 0); } }; QTEST_MAIN(test_ReaderDriverModel) #include "test_ReaderDriverModel.moc"