1 /*
2    SPDX-FileCopyrightText: 2016-2021 Laurent Montel <montel@kde.org>
3 
4    SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #include "importimapsettingsakonadicheckjobtest.h"
8 #include "../checks/importimapsettingsakonadicheckjob.h"
9 #include "importimapsettingspasswordtest.h"
10 
11 #include <QSignalSpy>
12 #include <QStandardPaths>
13 #include <QTest>
14 
Q_DECLARE_METATYPE(SieveEditorUtil::SieveServerConfig)15 Q_DECLARE_METATYPE(SieveEditorUtil::SieveServerConfig)
16 ImportImapSettingsAkonadiCheckJobTest::ImportImapSettingsAkonadiCheckJobTest(QObject *parent)
17     : QObject(parent)
18 {
19     qRegisterMetaType<SieveEditorUtil::SieveServerConfig>();
20 }
21 
~ImportImapSettingsAkonadiCheckJobTest()22 ImportImapSettingsAkonadiCheckJobTest::~ImportImapSettingsAkonadiCheckJobTest()
23 {
24 }
25 
initTestCase()26 void ImportImapSettingsAkonadiCheckJobTest::initTestCase()
27 {
28     QStandardPaths::setTestModeEnabled(true);
29 }
30 
shouldHaveSettingsFiles()31 void ImportImapSettingsAkonadiCheckJobTest::shouldHaveSettingsFiles()
32 {
33     qputenv("XDG_CONFIG_DIRS", QString(QLatin1String(IMPORTWIZARD_DATA_DIR) + QStringLiteral("/config/config1")).toLatin1().constData());
34     ImportImapSettingsAkonadiCheckJob job;
35     job.setImapSettingsPassword(new ImportImapSettingsPasswordTest);
36     QVERIFY(job.settingsCanBeImported());
37 }
38 
shouldHaveNotSettingsFiles()39 void ImportImapSettingsAkonadiCheckJobTest::shouldHaveNotSettingsFiles()
40 {
41     qputenv("XDG_CONFIG_DIRS", QString(QLatin1String(IMPORTWIZARD_DATA_DIR) + QStringLiteral("/config/noconfig")).toLatin1().constData());
42     ImportImapSettingsAkonadiCheckJob job;
43     job.setImapSettingsPassword(new ImportImapSettingsPasswordTest);
44     QVERIFY(!job.settingsCanBeImported());
45 }
46 
shouldHaveSettingsFilesImap()47 void ImportImapSettingsAkonadiCheckJobTest::shouldHaveSettingsFilesImap()
48 {
49     qputenv("XDG_CONFIG_DIRS", QString(QLatin1String(IMPORTWIZARD_DATA_DIR) + QStringLiteral("/config/config2")).toLatin1().constData());
50     ImportImapSettingsAkonadiCheckJob job;
51     job.setImapSettingsPassword(new ImportImapSettingsPasswordTest);
52     QVERIFY(job.settingsCanBeImported());
53 }
54 
shouldHaveSettingsFilesMbox()55 void ImportImapSettingsAkonadiCheckJobTest::shouldHaveSettingsFilesMbox()
56 {
57     qputenv("XDG_CONFIG_DIRS", QString(QLatin1String(IMPORTWIZARD_DATA_DIR) + QStringLiteral("/config/config3")).toLatin1().constData());
58     ImportImapSettingsAkonadiCheckJob job;
59     job.setImapSettingsPassword(new ImportImapSettingsPasswordTest);
60     QVERIFY(!job.settingsCanBeImported());
61 }
62 
shouldHaveImportSettings_data()63 void ImportImapSettingsAkonadiCheckJobTest::shouldHaveImportSettings_data()
64 {
65     QTest::addColumn<QString>("directory");
66     QTest::addColumn<int>("nbsignals");
67     QTest::addColumn<int>("nbSignalsNoSettingsFound");
68     QTest::newRow("reuseconfig") << QStringLiteral("/config/reuseconfig") << 1 << 0;
69     QTest::newRow("reuseconfigtwiceconfig") << QStringLiteral("/config/reuseconfigtwiceconfig") << 2 << 0;
70 
71     QTest::newRow("imapconfig") << QStringLiteral("/config/imapconfig") << 0 << 1;
72     QTest::newRow("imapconfigwithsieveconfig") << QStringLiteral("/config/imapconfigwithsieveconfig") << 1 << 0;
73 }
74 
shouldHaveImportSettings()75 void ImportImapSettingsAkonadiCheckJobTest::shouldHaveImportSettings()
76 {
77     QFETCH(QString, directory);
78     QFETCH(int, nbsignals);
79     QFETCH(int, nbSignalsNoSettingsFound);
80     qputenv("XDG_CONFIG_DIRS", QString(QLatin1String(IMPORTWIZARD_DATA_DIR) + directory).toLatin1().constData());
81     ImportImapSettingsAkonadiCheckJob job;
82     job.setImapSettingsPassword(new ImportImapSettingsPasswordTest);
83     QVERIFY(job.settingsCanBeImported());
84     QSignalSpy spy(&job, &ImportImapSettingsAkonadiCheckJob::importSetting);
85     QSignalSpy spy2(&job, &ImportImapSettingsAkonadiCheckJob::noSettingsImported);
86 
87     job.start();
88     QCOMPARE(spy.count(), nbsignals);
89     QCOMPARE(spy2.count(), nbSignalsNoSettingsFound);
90 }
91 
shouldImportSieveSettings_data()92 void ImportImapSettingsAkonadiCheckJobTest::shouldImportSieveSettings_data()
93 {
94     QTest::addColumn<QString>("directory");
95     QTest::addColumn<QString>("name");
96     QTest::addColumn<SieveEditorUtil::SieveServerConfig>("settings");
97 
98     SieveEditorUtil::SieveServerConfig settings;
99     settings.sieveImapAccountSettings.setUserName(QStringLiteral("foo@foo.com"));
100     settings.sieveImapAccountSettings.setServerName(QStringLiteral("bla.foo.com"));
101     settings.sieveImapAccountSettings.setPort(143);
102     settings.sieveImapAccountSettings.setPassword(QStringLiteral("password_imap"));
103     settings.sieveImapAccountSettings.setEncryptionMode(KSieveUi::SieveImapAccountSettings::EncryptionMode::STARTTLS);
104 
105     settings.sieveSettings.userName = QStringLiteral("foo@foo.com");
106     settings.sieveSettings.serverName = QStringLiteral("bla.foo.com");
107     settings.sieveSettings.password = QStringLiteral("password_imap");
108     settings.sieveSettings.port = 4190;
109 
110     QTest::newRow("reuseconfig") << QStringLiteral("/config/reuseconfig") << QStringLiteral("akonadi_kolab_resource_0rc") << settings;
111 
112     SieveEditorUtil::SieveServerConfig settings2;
113     settings2.sieveImapAccountSettings.setUserName(QStringLiteral("foo@foo.com"));
114     settings2.sieveImapAccountSettings.setServerName(QStringLiteral("bla.foo.com"));
115     settings2.sieveImapAccountSettings.setPort(143);
116     settings2.sieveImapAccountSettings.setPassword(QStringLiteral("password_imap"));
117     settings2.sieveImapAccountSettings.setEncryptionMode(KSieveUi::SieveImapAccountSettings::EncryptionMode::STARTTLS);
118     settings2.sieveSettings.userName = QStringLiteral("b");
119     settings2.sieveSettings.serverName = QStringLiteral("bla.foo.com"); // TODO
120     settings2.sieveSettings.password = QStringLiteral("password_custom_sieve_imap");
121     settings2.sieveSettings.port = 150;
122 
123     QTest::newRow("usecustomsieveconfig") << QStringLiteral("/config/usecustomsieveconfig") << QStringLiteral("akonadi_kolab_resource_0rc") << settings2;
124 
125     SieveEditorUtil::SieveServerConfig settings3;
126     settings3.sieveImapAccountSettings.setUserName(QStringLiteral("foo@foo.com"));
127     settings3.sieveImapAccountSettings.setServerName(QStringLiteral("bla.foo.com"));
128     settings3.sieveImapAccountSettings.setPort(143);
129     settings3.sieveImapAccountSettings.setAuthenticationType(static_cast<KSieveUi::SieveImapAccountSettings::AuthenticationMode>(3));
130     settings3.sieveImapAccountSettings.setEncryptionMode(KSieveUi::SieveImapAccountSettings::EncryptionMode::Unencrypted);
131     settings3.sieveImapAccountSettings.setPassword(QStringLiteral("password_imap"));
132     settings3.sieveSettings.userName = QStringLiteral("b");
133     settings3.sieveSettings.password = QStringLiteral("password_custom_sieve_imap");
134     settings3.sieveSettings.serverName = QStringLiteral("bla.foo.com"); // TODO
135     settings3.sieveSettings.port = 150;
136 
137     QTest::newRow("usecustomsieveconfig2") << QStringLiteral("/config/usecustomsieveconfig2") << QStringLiteral("akonadi_kolab_resource_0rc") << settings3;
138 
139     SieveEditorUtil::SieveServerConfig settings4;
140     settings4.sieveImapAccountSettings.setUserName(QStringLiteral("foo@foo.com"));
141     settings4.sieveImapAccountSettings.setServerName(QStringLiteral("bla.foo.com"));
142     settings4.sieveImapAccountSettings.setPort(143);
143     settings4.sieveImapAccountSettings.setAuthenticationType(static_cast<KSieveUi::SieveImapAccountSettings::AuthenticationMode>(3));
144     settings4.sieveImapAccountSettings.setEncryptionMode(KSieveUi::SieveImapAccountSettings::EncryptionMode::STARTTLS);
145     settings4.sieveImapAccountSettings.setPassword(QStringLiteral("password_imap"));
146     settings4.sieveSettings.userName = QStringLiteral("b");
147     settings4.sieveSettings.password = QStringLiteral("password_custom_sieve_imap");
148     settings4.sieveSettings.serverName = QStringLiteral("bla.foo.com"); // TODO
149     settings4.sieveSettings.port = 150;
150 
151     QTest::newRow("usecustomsieveconfig3") << QStringLiteral("/config/usecustomsieveconfig3") << QStringLiteral("akonadi_kolab_resource_0rc") << settings4;
152 
153     SieveEditorUtil::SieveServerConfig settings5;
154     settings5.sieveImapAccountSettings.setUserName(QStringLiteral("foo@foo.com"));
155     settings5.sieveImapAccountSettings.setServerName(QStringLiteral("bla.foo.com"));
156     settings5.sieveImapAccountSettings.setPort(143);
157     settings5.sieveImapAccountSettings.setAuthenticationType(static_cast<KSieveUi::SieveImapAccountSettings::AuthenticationMode>(3));
158     settings5.sieveImapAccountSettings.setEncryptionMode(KSieveUi::SieveImapAccountSettings::EncryptionMode::SSLorTLS);
159     settings5.sieveImapAccountSettings.setPassword(QStringLiteral("password_imap"));
160     settings5.sieveSettings.userName = QStringLiteral("b");
161     settings5.sieveSettings.serverName = QStringLiteral("bla.foo.com"); // TODO
162     settings5.sieveSettings.password = QStringLiteral("password_custom_sieve_imap");
163     settings5.sieveSettings.port = 150;
164 
165     QTest::newRow("usecustomsieveconfig4") << QStringLiteral("/config/usecustomsieveconfig4") << QStringLiteral("akonadi_kolab_resource_0rc") << settings5;
166 }
167 
shouldImportSieveSettings()168 void ImportImapSettingsAkonadiCheckJobTest::shouldImportSieveSettings()
169 {
170     QFETCH(QString, directory);
171     QFETCH(QString, name);
172     QFETCH(SieveEditorUtil::SieveServerConfig, settings);
173     qputenv("XDG_CONFIG_DIRS", QString(QLatin1String(IMPORTWIZARD_DATA_DIR) + directory).toLatin1().constData());
174     ImportImapSettingsAkonadiCheckJob job;
175     job.setImapSettingsPassword(new ImportImapSettingsPasswordTest);
176     QVERIFY(job.settingsCanBeImported());
177     QSignalSpy spy(&job, &ImportImapSettingsAkonadiCheckJob::importSetting);
178     job.start();
179     QCOMPARE(spy.count(), 1);
180     QCOMPARE(spy.at(0).at(0).toString(), name);
181     auto importSettings = spy.at(0).at(1).value<SieveEditorUtil::SieveServerConfig>();
182     QCOMPARE(importSettings, settings);
183 }
184 
185 QTEST_MAIN(ImportImapSettingsAkonadiCheckJobTest)
186