File indexing completed on 2024-04-28 04:48:13
0001 /**************************************************************************************** 0002 * Copyright (c) 2013 Konrad Zemek <konrad.zemek@gmail.com> * 0003 * * 0004 * This program is free software; you can redistribute it and/or modify it under * 0005 * the terms of the GNU General Public License as published by the Free Software * 0006 * Foundation; either version 2 of the License, or (at your option) any later * 0007 * version. * 0008 * * 0009 * This program is distributed in the hope that it will be useful, but WITHOUT ANY * 0010 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * 0011 * PARTICULAR PURPOSE. See the GNU General Public License for more details. * 0012 * * 0013 * You should have received a copy of the GNU General Public License along with * 0014 * this program. If not, see <http://www.gnu.org/licenses/>. * 0015 ****************************************************************************************/ 0016 0017 #include "TestImporterManager.h" 0018 0019 #include "core/support/Amarok.h" 0020 #include "core/support/Components.h" 0021 0022 #include <QStringList> 0023 #include <QTest> 0024 0025 0026 QTEST_GUILESS_MAIN( TestImporterManager ) 0027 0028 using namespace ::testing; 0029 0030 void 0031 TestImporterManager::initShouldLoadSettings() 0032 { 0033 QVariantMap config; 0034 config["uid"] = QString( "TestId" ); 0035 config["custom"] = QString( "custom" ); 0036 0037 { 0038 NiceMock<MockManager> mock; 0039 0040 EXPECT_CALL( mock, newInstance( Eq(config) ) ).WillOnce( Invoke( &mock, &MockManager::concreteNewInstance ) ); 0041 EXPECT_CALL( mock, type() ).WillRepeatedly( Return( QString( "TestMockManager" ) ) ); 0042 0043 mock.init(); 0044 mock.createProvider( config ); 0045 } 0046 0047 EXPECT_CALL( *m_mockManager, newInstance( Eq(config) ) ); 0048 EXPECT_CALL( *m_mockManager, type() ).WillRepeatedly( Return( QString( "TestMockManager" ) ) ); 0049 0050 m_mockManager->init(); 0051 } 0052 0053 void 0054 TestImporterManager::creatingProviderShouldSetConfigAndParent() 0055 { 0056 QVariantMap cfg; 0057 cfg["customField"] = QString( "I'm custom" ); 0058 0059 m_mockManager->init(); 0060 StatSyncing::ProviderPtr providerPtr = m_mockManager->createProvider( cfg ); 0061 0062 QVERIFY( dynamic_cast<MockProvider*>(providerPtr.data())->config().contains( "customField" ) ); 0063 QCOMPARE( dynamic_cast<MockProvider*>(providerPtr.data())->manager(), m_mockManager ); 0064 } 0065 0066 void 0067 TestImporterManager::creatingProviderShouldSaveSettings() 0068 { 0069 QVariantMap cfg; 0070 cfg["uid"] = QString( "TestId" ); 0071 cfg["custom"] = QString( "custom" ); 0072 0073 EXPECT_CALL( *m_mockManager, type() ).WillRepeatedly( Return( QString( "TestMockManager" ) ) ); 0074 0075 m_mockManager->init(); 0076 m_mockManager->createProvider( cfg ); 0077 0078 KConfigGroup group = m_mockManager->providerConfig( "TestId" ); 0079 QVERIFY( group.exists() ); 0080 QCOMPARE( group.readEntry( "uid", QString() ), QString( "TestId" ) ); 0081 QCOMPARE( group.readEntry( "custom", QString() ), QString( "custom" ) ); 0082 } 0083 0084 void 0085 TestImporterManager::creatingProviderShouldSaveGeneratedId() 0086 { 0087 EXPECT_CALL( *m_mockManager, type() ).WillRepeatedly( Return( QString( "TestMockManager" ) ) ); 0088 0089 QVERIFY( !m_mockManager->managerConfig().exists() ); 0090 0091 m_mockManager->init(); 0092 StatSyncing::ProviderPtr provider = m_mockManager->createProvider( QVariantMap() ); 0093 0094 KConfigGroup group = m_mockManager->managerConfig(); 0095 QVERIFY( group.exists() ); 0096 QVERIFY( !group.groupList().empty() ); 0097 0098 group = m_mockManager->providerConfig( provider ); 0099 QVERIFY( group.exists() ); 0100 QCOMPARE( group.readEntry( "uid", QString() ), provider->id() ); 0101 } 0102 0103 void 0104 TestImporterManager::creatingConfigWidgetShouldDelegate() 0105 { 0106 StatSyncing::ProviderConfigWidget *ptr = reinterpret_cast<StatSyncing::ProviderConfigWidget*>( 0x19 ); 0107 0108 EXPECT_CALL( *m_mockManager, configWidget( QVariantMap() ) ).WillOnce( Return( ptr ) ); 0109 0110 m_mockManager->init(); 0111 QCOMPARE( m_mockManager->createConfigWidget(), ptr ); 0112 } 0113 0114 void 0115 TestImporterManager::createConfigWidgetShouldNotCrashOnNull() 0116 { 0117 StatSyncing::ProviderConfigWidget *ptr = nullptr; 0118 0119 EXPECT_CALL( *m_mockManager, configWidget(_) ) 0120 .WillOnce( Return( ptr ) ); 0121 0122 m_mockManager->init(); 0123 QCOMPARE( m_mockManager->createConfigWidget(), ptr ); 0124 } 0125 0126 void 0127 TestImporterManager::createProviderShouldNotCrashOnNull() 0128 { 0129 m_mockManager->init(); 0130 0131 EXPECT_CALL( *m_mockManager, newInstance(_) ) 0132 .WillOnce( Return( QSharedPointer<StatSyncing::ImporterProvider>() ) ); 0133 0134 QVERIFY( !m_mockManager->createProvider( QVariantMap() ) ); 0135 } 0136 0137 void 0138 TestImporterManager::createProviderShouldReplaceProviderIfExists() 0139 { 0140 m_mockManager->init(); 0141 0142 EXPECT_CALL( *m_mockController, registerProvider(_) ).Times( 2 ); 0143 0144 StatSyncing::ProviderPtr provider = m_mockManager->createProvider( QVariantMap() ); 0145 0146 QVERIFY( m_mockManager->providers().contains( provider->id() ) ); 0147 QCOMPARE( m_mockManager->providers()[provider->id()], provider ); 0148 0149 EXPECT_CALL( *m_mockController, unregisterProvider( provider ) ); 0150 0151 QVariantMap cfg; 0152 cfg.insert( "uid", provider->id() ); 0153 StatSyncing::ProviderPtr replaceProvider = m_mockManager->createProvider( cfg ); 0154 0155 QCOMPARE( m_mockManager->providers()[provider->id()], replaceProvider ); 0156 } 0157 0158 void 0159 TestImporterManager::createProviderShouldRegisterProvider() 0160 { 0161 QVariantMap cfg; 0162 cfg["uid"] = "uid"; 0163 StatSyncing::ImporterProviderPtr providerPtr( new NiceMock<MockProvider>( cfg, m_mockManager ) ); 0164 0165 m_mockManager->init(); 0166 0167 EXPECT_CALL( *m_mockManager, newInstance(_) ).WillOnce( Return( providerPtr ) ); 0168 EXPECT_CALL( *m_mockController, registerProvider( Eq(providerPtr) ) ); 0169 0170 m_mockManager->createProvider( QVariantMap() ); 0171 } 0172 0173 void 0174 TestImporterManager::forgetProviderShouldUnregisterProvider() 0175 { 0176 m_mockManager->init(); 0177 0178 EXPECT_CALL( *m_mockController, registerProvider(_) ); 0179 0180 StatSyncing::ProviderPtr providerPtr = m_mockManager->createProvider( QVariantMap() ); 0181 0182 EXPECT_CALL( *m_mockController, unregisterProvider( Eq(providerPtr) ) ); 0183 m_mockManager->providerForgottenProxy( providerPtr->id() ); 0184 } 0185 0186 void 0187 TestImporterManager::forgetProviderShouldForgetConfig() 0188 { 0189 QVariantMap cfg; 0190 cfg.insert( "uid", "TestId" ); 0191 0192 EXPECT_CALL( *m_mockManager, type() ).WillRepeatedly( 0193 Return( QString( "TestMockManager" ) ) ); 0194 0195 m_mockManager->init(); 0196 StatSyncing::ProviderPtr providerPtr = m_mockManager->createProvider( cfg ); 0197 0198 KConfigGroup group = m_mockManager->providerConfig( providerPtr ); 0199 QVERIFY( group.exists() ); 0200 QVERIFY( group.hasKey( "uid" ) ); 0201 0202 m_mockManager->providerForgottenProxy( providerPtr->id() ); 0203 0204 QVERIFY( !m_mockManager->providerConfig( providerPtr ).exists() ); 0205 } 0206 0207 void 0208 TestImporterManager::forgetProviderShouldHangleInvalidId() 0209 { 0210 EXPECT_CALL( *m_mockController, unregisterProvider(_) ).Times( 0 ); 0211 0212 m_mockManager->init(); 0213 m_mockManager->providerForgottenProxy( QString() ); 0214 } 0215 0216 void 0217 TestImporterManager::forgetProviderShouldNotCauseOtherProvidersToBeForgotten() 0218 { 0219 m_mockManager->init(); 0220 0221 StatSyncing::ProviderPtr providerPtr1 = m_mockManager->createProvider( QVariantMap() ); 0222 StatSyncing::ProviderPtr providerPtr2 = m_mockManager->createProvider( QVariantMap() ); 0223 0224 QVERIFY( m_mockManager->providerConfig( providerPtr1 ).exists() ); 0225 QVERIFY( m_mockManager->providerConfig( providerPtr2 ).exists() ); 0226 0227 m_mockManager->providerForgottenProxy( providerPtr1->id() ); 0228 0229 QVERIFY( !m_mockManager->providerConfig( providerPtr1 ).exists() ); 0230 QVERIFY( m_mockManager->providerConfig( providerPtr2 ).exists() ); 0231 } 0232 0233 void 0234 TestImporterManager::managerShouldHandleMultipleProviders() 0235 { 0236 EXPECT_CALL( *m_mockController, registerProvider(_) ).Times( 10 ); 0237 0238 QList<StatSyncing::ProviderPtr> providerPtrs; 0239 for( int i = 0; i < 10; ++i ) 0240 providerPtrs << m_mockManager->createProvider( QVariantMap() ); 0241 0242 foreach( const StatSyncing::ProviderPtr &providerPtr, providerPtrs ) 0243 QVERIFY( m_mockManager->providers().contains( providerPtr->id() ) ); 0244 } 0245