diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2018-01-08 14:32:37 +0100 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2018-01-08 16:26:38 +0100 |
commit | ed317a9be63c6877702d0871e5fa1bef34ab799f (patch) | |
tree | 1ed15ea9dae1a48285674f06365d404af8c9b5c0 | |
parent | 3ac6cf5ffae2247719730f328d1363c498e4ee83 (diff) | |
download | kube-ed317a9be63c6877702d0871e5fa1bef34ab799f.tar.gz kube-ed317a9be63c6877702d0871e5fa1bef34ab799f.zip |
Composertest with TestStore
-rw-r--r-- | components/kube/tests/tst_composerview.qml | 41 | ||||
-rw-r--r-- | tests/CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/teststore.cpp | 84 | ||||
-rw-r--r-- | tests/teststore.h | 2 |
4 files changed, 94 insertions, 34 deletions
diff --git a/components/kube/tests/tst_composerview.qml b/components/kube/tests/tst_composerview.qml index d9cd2dfb..a315c79a 100644 --- a/components/kube/tests/tst_composerview.qml +++ b/components/kube/tests/tst_composerview.qml | |||
@@ -49,16 +49,6 @@ TestCase { | |||
49 | verify(newMailButton.activeFocus) | 49 | verify(newMailButton.activeFocus) |
50 | } | 50 | } |
51 | 51 | ||
52 | Component { | ||
53 | id: controllerComponent | ||
54 | Kube.DomainObjectController {} | ||
55 | } | ||
56 | |||
57 | Component { | ||
58 | id: outboxComponent | ||
59 | Kube.OutboxModel {} | ||
60 | } | ||
61 | |||
62 | function test_3sendMessage() { | 52 | function test_3sendMessage() { |
63 | var initialState = { | 53 | var initialState = { |
64 | accounts: [{ | 54 | accounts: [{ |
@@ -78,26 +68,21 @@ TestCase { | |||
78 | id: "resource2", | 68 | id: "resource2", |
79 | account: "account1", | 69 | account: "account1", |
80 | type: "mailtransport" | 70 | type: "mailtransport" |
71 | }], | ||
72 | mails:[{ | ||
73 | resource: "resource1", | ||
74 | subject: "subject", | ||
75 | body: "body", | ||
76 | to: ["to@example.org"], | ||
77 | cc: ["cc@example.org"], | ||
78 | bcc: ["bcc@example.org"], | ||
79 | draft: true | ||
81 | }] | 80 | }] |
82 | } | 81 | } |
83 | TestStore.setup(initialState) | 82 | TestStore.setup(initialState) |
84 | var composer = createTemporaryObject(composerComponent, testCase, {}) | 83 | var composer = createTemporaryObject(composerComponent, testCase, {}) |
85 | 84 | ||
86 | var domainObjectController = controllerComponent.createObject(null, {blocking: true}) | 85 | var createdMail = TestStore.load("mail", {resource: "resource1"}) |
87 | var mail = { | ||
88 | type: "mail", | ||
89 | subject: "subject", | ||
90 | body: "body", | ||
91 | to: ["to@example.org"], | ||
92 | cc: ["cc@example.org"], | ||
93 | bcc: ["bcc@example.org"], | ||
94 | draft: true | ||
95 | } | ||
96 | domainObjectController.create(mail) | ||
97 | |||
98 | tryVerify(function(){ return domainObjectController.currentObject }) | ||
99 | var createdMail = domainObjectController.currentObject | ||
100 | verify(createdMail) | ||
101 | 86 | ||
102 | var loadAsDraft = true | 87 | var loadAsDraft = true |
103 | composer.loadMessage(createdMail, loadAsDraft) | 88 | composer.loadMessage(createdMail, loadAsDraft) |
@@ -105,7 +90,9 @@ TestCase { | |||
105 | verify(sendMailButton) | 90 | verify(sendMailButton) |
106 | tryVerify(function(){ return sendMailButton.enabled }) | 91 | tryVerify(function(){ return sendMailButton.enabled }) |
107 | sendMailButton.clicked() | 92 | sendMailButton.clicked() |
108 | var outbox = outboxComponent.createObject(null, {}) | 93 | |
109 | tryCompare(outbox, "count", 1) | 94 | tryVerify(function(){ return TestStore.load("mail", {resource: "resource2"}) }) |
95 | //TODO ensure draft is deleted | ||
96 | //TODO ensure draft is deleted | ||
110 | } | 97 | } |
111 | } | 98 | } |
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index ca394d9e..b5eb2a96 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt | |||
@@ -7,4 +7,5 @@ target_link_libraries(kubetestrunner | |||
7 | Qt5::QuickTest | 7 | Qt5::QuickTest |
8 | Qt5::Quick | 8 | Qt5::Quick |
9 | sink | 9 | sink |
10 | kubeframework | ||
10 | ) | 11 | ) |
diff --git a/tests/teststore.cpp b/tests/teststore.cpp index a8cd0b2d..728af885 100644 --- a/tests/teststore.cpp +++ b/tests/teststore.cpp | |||
@@ -19,10 +19,15 @@ | |||
19 | #include "teststore.h" | 19 | #include "teststore.h" |
20 | 20 | ||
21 | #include <sink/store.h> | 21 | #include <sink/store.h> |
22 | #include <sink/resourcecontrol.h> | ||
23 | #include <sink/secretstore.h> | ||
24 | #include <kmime/kmime_message.h> | ||
22 | 25 | ||
23 | #include <QDebug> | 26 | #include <QDebug> |
24 | #include <QVariant> | 27 | #include <QVariant> |
25 | 28 | ||
29 | #include "framework/src/domain/mime/mailtemplates.h" | ||
30 | |||
26 | using namespace Kube; | 31 | using namespace Kube; |
27 | 32 | ||
28 | static void iterateOverObjects(const QVariantList &list, std::function<void(const QVariantMap &)> callback) | 33 | static void iterateOverObjects(const QVariantList &list, std::function<void(const QVariantMap &)> callback) |
@@ -33,20 +38,62 @@ static void iterateOverObjects(const QVariantList &list, std::function<void(cons | |||
33 | } | 38 | } |
34 | } | 39 | } |
35 | 40 | ||
41 | static QStringList toStringList(const QVariantList &list) | ||
42 | { | ||
43 | QStringList s; | ||
44 | for (const auto &e : list) { | ||
45 | s << e.toString(); | ||
46 | } | ||
47 | return s; | ||
48 | } | ||
49 | |||
50 | static void createMail(const QVariantMap &object) | ||
51 | { | ||
52 | using namespace Sink::ApplicationDomain; | ||
53 | |||
54 | auto toAddresses = toStringList(object["to"].toList()); | ||
55 | auto ccAddresses = toStringList(object["cc"].toList()); | ||
56 | auto bccAddresses = toStringList(object["bcc"].toList()); | ||
57 | |||
58 | KMime::Types::Mailbox mb; | ||
59 | mb.fromUnicodeString("identity@example.org"); | ||
60 | auto msg = MailTemplates::createMessage({}, | ||
61 | toAddresses, | ||
62 | ccAddresses, | ||
63 | bccAddresses, | ||
64 | mb, | ||
65 | object["subject"].toString(), | ||
66 | object["body"].toString(), | ||
67 | {}, | ||
68 | {}, | ||
69 | {}, | ||
70 | {}); | ||
71 | |||
72 | auto mail = ApplicationDomainType::createEntity<Mail>(object["resource"].toByteArray()); | ||
73 | mail.setMimeMessage(msg->encodedContent(true)); | ||
74 | Sink::Store::create<Mail>(mail).exec().waitForFinished(); | ||
75 | } | ||
76 | |||
36 | void TestStore::setup(const QVariantMap &map) | 77 | void TestStore::setup(const QVariantMap &map) |
37 | { | 78 | { |
38 | iterateOverObjects(map.value("resources").toList(), [] (const QVariantMap &object) { | 79 | QByteArrayList resources; |
80 | iterateOverObjects(map.value("resources").toList(), [&] (const QVariantMap &object) { | ||
81 | resources << object["id"].toByteArray(); | ||
39 | auto resource = [&] { | 82 | auto resource = [&] { |
83 | using namespace Sink::ApplicationDomain; | ||
84 | auto resource = ApplicationDomainType::createEntity<SinkResource>("", object["id"].toByteArray()); | ||
40 | if (object["type"] == "dummy") { | 85 | if (object["type"] == "dummy") { |
41 | return Sink::ApplicationDomain::DummyResource::create(object["account"].toByteArray()); | 86 | resource.setResourceType("sink.dummy"); |
42 | } | 87 | } else if (object["type"] == "mailtransport") { |
43 | if (object["type"] == "mailtransport") { | 88 | resource.setResourceType("sink.mailtransport"); |
44 | return Sink::ApplicationDomain::MailtransportResource::create(object["account"].toByteArray()); | 89 | } else { |
90 | Q_ASSERT(false); | ||
45 | } | 91 | } |
46 | Q_ASSERT(false); | 92 | return resource; |
47 | return Sink::ApplicationDomain::SinkResource{}; | ||
48 | }(); | 93 | }(); |
94 | resource.setAccount(object["account"].toByteArray()); | ||
49 | Sink::Store::create(resource).exec().waitForFinished(); | 95 | Sink::Store::create(resource).exec().waitForFinished(); |
96 | Sink::SecretStore::instance().insert(resource.identifier(), "secret"); | ||
50 | }); | 97 | }); |
51 | 98 | ||
52 | iterateOverObjects(map.value("identities").toList(), [] (const QVariantMap &object) { | 99 | iterateOverObjects(map.value("identities").toList(), [] (const QVariantMap &object) { |
@@ -56,4 +103,27 @@ void TestStore::setup(const QVariantMap &map) | |||
56 | identity.setName(object["name"].toString()); | 103 | identity.setName(object["name"].toString()); |
57 | Sink::Store::create(identity).exec().waitForFinished(); | 104 | Sink::Store::create(identity).exec().waitForFinished(); |
58 | }); | 105 | }); |
106 | |||
107 | iterateOverObjects(map.value("mails").toList(), createMail); | ||
108 | |||
109 | Sink::ResourceControl::flushMessageQueue(resources).exec().waitForFinished(); | ||
110 | } | ||
111 | |||
112 | QVariant TestStore::load(const QByteArray &type, const QVariantMap &filter) | ||
113 | { | ||
114 | using namespace Sink::ApplicationDomain; | ||
115 | if (type == "mail") { | ||
116 | Sink::Query query; | ||
117 | if (filter.contains("resource")) { | ||
118 | query.resourceFilter(filter.value("resource").toByteArray()); | ||
119 | } | ||
120 | auto list = Sink::Store::read<Mail>(query); | ||
121 | if (!list.isEmpty()) { | ||
122 | return QVariant::fromValue(Mail::Ptr::create(list.first())); | ||
123 | } | ||
124 | return {}; | ||
125 | } | ||
126 | |||
127 | Q_ASSERT(false); | ||
128 | return {}; | ||
59 | } | 129 | } |
diff --git a/tests/teststore.h b/tests/teststore.h index f0578ca5..e8fce6da 100644 --- a/tests/teststore.h +++ b/tests/teststore.h | |||
@@ -19,6 +19,7 @@ | |||
19 | #pragma once | 19 | #pragma once |
20 | 20 | ||
21 | #include <QObject> | 21 | #include <QObject> |
22 | #include <QVariant> | ||
22 | 23 | ||
23 | namespace Kube { | 24 | namespace Kube { |
24 | 25 | ||
@@ -26,6 +27,7 @@ class TestStore : public QObject { | |||
26 | Q_OBJECT | 27 | Q_OBJECT |
27 | public: | 28 | public: |
28 | Q_INVOKABLE void setup(const QVariantMap &); | 29 | Q_INVOKABLE void setup(const QVariantMap &); |
30 | Q_INVOKABLE QVariant load(const QByteArray &type, const QVariantMap &); | ||
29 | }; | 31 | }; |
30 | 32 | ||
31 | } | 33 | } |