1 #include <chrono>
2 #include <cstdio>
3 #include <iostream>
4 #include <string>
5 
6 #include "../backports.hpp"
7 
8 #include "libdnf/transaction/CompsGroupItem.hpp"
9 #include "libdnf/transaction/Transformer.hpp"
10 
11 #include "CompsGroupItemTest.hpp"
12 
13 CPPUNIT_TEST_SUITE_REGISTRATION(CompsGroupItemTest);
14 
15 using namespace libdnf;
16 
17 void
setUp()18 CompsGroupItemTest::setUp()
19 {
20     conn = std::make_shared< SQLite3 >(":memory:");
21     Transformer::createDatabase(conn);
22 }
23 
24 void
tearDown()25 CompsGroupItemTest::tearDown()
26 {
27 }
28 
29 static std::shared_ptr< CompsGroupItem >
createCompsGroup(std::shared_ptr<SQLite3> conn)30 createCompsGroup(std::shared_ptr< SQLite3 > conn)
31 {
32     auto grp = std::make_shared< CompsGroupItem >(conn);
33     grp->setGroupId("core");
34     grp->setName("Smallest possible installation");
35     grp->setTranslatedName("translated(Smallest possible installation)");
36     grp->setPackageTypes(CompsPackageType::DEFAULT);
37     grp->addPackage("bash", true, CompsPackageType::MANDATORY);
38     grp->addPackage("rpm", false, CompsPackageType::OPTIONAL);
39     grp->save();
40     return grp;
41 }
42 
43 void
testCreate()44 CompsGroupItemTest::testCreate()
45 {
46     auto grp = createCompsGroup(conn);
47 
48     CompsGroupItem grp2(conn, grp->getId());
49     CPPUNIT_ASSERT(grp2.getId() == grp->getId());
50     CPPUNIT_ASSERT(grp2.getGroupId() == grp->getGroupId());
51     CPPUNIT_ASSERT(grp2.getName() == grp->getName());
52     CPPUNIT_ASSERT(grp2.getTranslatedName() == grp->getTranslatedName());
53     CPPUNIT_ASSERT(grp2.getPackageTypes() == grp->getPackageTypes());
54 
55     {
56         auto pkg = grp2.getPackages().at(0);
57         CPPUNIT_ASSERT(pkg->getName() == "bash");
58         CPPUNIT_ASSERT(pkg->getInstalled() == true);
59         CPPUNIT_ASSERT(pkg->getPackageType() == CompsPackageType::MANDATORY);
60     }
61     {
62         auto pkg = grp2.getPackages().at(1);
63         CPPUNIT_ASSERT(pkg->getName() == "rpm");
64         CPPUNIT_ASSERT(pkg->getInstalled() == false);
65         CPPUNIT_ASSERT(pkg->getPackageType() == CompsPackageType::OPTIONAL);
66     }
67 
68     // test adding a duplicate group
69     grp2.addPackage("rpm", true, CompsPackageType::MANDATORY);
70     {
71         auto pkg = grp2.getPackages().at(1);
72         CPPUNIT_ASSERT(pkg->getName() == "rpm");
73         CPPUNIT_ASSERT(pkg->getInstalled() == true);
74         CPPUNIT_ASSERT(pkg->getPackageType() == CompsPackageType::MANDATORY);
75     }
76 }
77 
78 void
testGetTransactionItems()79 CompsGroupItemTest::testGetTransactionItems()
80 {
81     libdnf::swdb_private::Transaction trans(conn);
82     auto grp = createCompsGroup(conn);
83     auto ti = trans.addItem(grp, "", 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 grp2 = transItem->getCompsGroupItem();
96     {
97         auto pkg = grp2->getPackages().at(0);
98         CPPUNIT_ASSERT_EQUAL(std::string("bash"), pkg->getName());
99     }
100     {
101         auto pkg = grp2->getPackages().at(1);
102         CPPUNIT_ASSERT_EQUAL(std::string("rpm"), pkg->getName());
103     }
104 }
105