1 #include <chrono>
2 #include <cstdio>
3 #include <iostream>
4 #include <string>
5 
6 #include "../backports.hpp"
7 
8 #include "libdnf/transaction/CompsEnvironmentItem.hpp"
9 #include "libdnf/transaction/Transformer.hpp"
10 
11 #include "CompsEnvironmentItemTest.hpp"
12 
13 CPPUNIT_TEST_SUITE_REGISTRATION(CompsEnvironmentItemTest);
14 
15 using namespace libdnf;
16 
17 void
setUp()18 CompsEnvironmentItemTest::setUp()
19 {
20     conn = std::make_shared< SQLite3 >(":memory:");
21     Transformer::createDatabase(conn);
22 }
23 
24 void
tearDown()25 CompsEnvironmentItemTest::tearDown()
26 {
27 }
28 
29 static std::shared_ptr< CompsEnvironmentItem >
createCompsEnvironment(std::shared_ptr<SQLite3> conn)30 createCompsEnvironment(std::shared_ptr< SQLite3 > conn)
31 {
32     auto env = std::make_shared< CompsEnvironmentItem >(conn);
33     env->setEnvironmentId("minimal");
34     env->setName("Minimal Environment");
35     env->setTranslatedName("translated(Minimal Environment)");
36     env->setPackageTypes(CompsPackageType::DEFAULT);
37     env->addGroup("core", true, CompsPackageType::MANDATORY);
38     env->addGroup("base", false, CompsPackageType::OPTIONAL);
39     env->save();
40     return env;
41 }
42 
43 void
testCreate()44 CompsEnvironmentItemTest::testCreate()
45 {
46     auto env = createCompsEnvironment(conn);
47 
48     CompsEnvironmentItem env2(conn, env->getId());
49     CPPUNIT_ASSERT(env2.getId() == env->getId());
50     CPPUNIT_ASSERT(env2.getEnvironmentId() == env->getEnvironmentId());
51     CPPUNIT_ASSERT(env2.getName() == env->getName());
52     CPPUNIT_ASSERT(env2.getTranslatedName() == env->getTranslatedName());
53     CPPUNIT_ASSERT(env2.getPackageTypes() == env->getPackageTypes());
54 
55     {
56         auto group = env2.getGroups().at(0);
57         CPPUNIT_ASSERT(group->getGroupId() == "base");
58         CPPUNIT_ASSERT(group->getInstalled() == false);
59         CPPUNIT_ASSERT(group->getGroupType() == CompsPackageType::OPTIONAL);
60     }
61     {
62         auto group = env2.getGroups().at(1);
63         CPPUNIT_ASSERT(group->getGroupId() == "core");
64         CPPUNIT_ASSERT(group->getInstalled() == true);
65         CPPUNIT_ASSERT(group->getGroupType() == CompsPackageType::MANDATORY);
66     }
67 
68     // test adding a duplicate group
69     env2.addGroup("base", true, CompsPackageType::MANDATORY);
70     {
71         auto group = env2.getGroups().at(0);
72         CPPUNIT_ASSERT(group->getGroupId() == "base");
73         CPPUNIT_ASSERT(group->getInstalled() == true);
74         CPPUNIT_ASSERT(group->getGroupType() == CompsPackageType::MANDATORY);
75     }
76 }
77 
78 void
testGetTransactionItems()79 CompsEnvironmentItemTest::testGetTransactionItems()
80 {
81     libdnf::swdb_private::Transaction trans(conn);
82     auto env = createCompsEnvironment(conn);
83     auto ti = trans.addItem(env, "", TransactionItemAction::INSTALL, TransactionItemReason::USER);
84     ti->setState(TransactionItemState::DONE);
85     trans.begin();
86     trans.finish(TransactionState::DONE);
87 
88     libdnf::Transaction trans2(conn, trans.getId());
89 
90     auto transItems = trans2.getItems();
91     CPPUNIT_ASSERT_EQUAL(1, static_cast< int >(transItems.size()));
92 
93     auto transItem = transItems.at(0);
94 
95     auto env2 = transItem->getCompsEnvironmentItem();
96     {
97         auto group = env2->getGroups().at(0);
98         CPPUNIT_ASSERT_EQUAL(std::string("base"), group->getGroupId());
99     }
100     {
101         auto group = env2->getGroups().at(1);
102         CPPUNIT_ASSERT_EQUAL(std::string("core"), group->getGroupId());
103     }
104 }
105