File indexing completed on 2024-04-21 04:40:43
0001 /* 0002 SPDX-FileCopyrightText: 2020 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include <KOpeningHours/Interval> 0008 #include <KOpeningHours/IntervalModel> 0009 0010 #include <QAbstractItemModelTester> 0011 #include <QDateTime> 0012 #include <QTest> 0013 0014 using namespace KOpeningHours; 0015 0016 class IntervalModelTest : public QObject 0017 { 0018 Q_OBJECT 0019 private Q_SLOTS: 0020 void testModel() 0021 { 0022 IntervalModel model; 0023 QAbstractItemModelTester modelTest(&model); 0024 0025 OpeningHours oh("Mo,We,Fr 10:00-20:00; Su 08:00-14:00"); 0026 QCOMPARE(oh.error(), OpeningHours::NoError); 0027 0028 model.setOpeningHours(oh); 0029 model.setBeginDate({2020, 11, 2}); 0030 model.setEndDate({2020, 11, 9}); 0031 0032 QCOMPARE(model.rowCount(), 7); 0033 for (int i = 0; i < model.rowCount(); ++i) { 0034 const auto idx = model.index(i, 0); 0035 const auto dt = idx.data(IntervalModel::DateRole).toDate(); 0036 QCOMPARE(dt, QDate(2020, 11, 2).addDays(i)); 0037 const auto intervals = idx.data(IntervalModel::IntervalsRole).value<std::vector<Interval>>(); 0038 QCOMPARE(intervals.size(), (i % 2) ? 1 : 3); 0039 0040 QCOMPARE(intervals.front().begin(), QDateTime(dt, {0, 0})); 0041 QCOMPARE(intervals.back().end(), QDateTime(dt.addDays(1), {0, 0})); 0042 } 0043 } 0044 0045 void testModelOpenIntervals() 0046 { 0047 IntervalModel model; 0048 QAbstractItemModelTester modelTest(&model); 0049 0050 OpeningHours oh("24/7"); 0051 QCOMPARE(oh.error(), OpeningHours::NoError); 0052 0053 model.setOpeningHours(oh); 0054 model.setBeginDate({2020, 11, 2}); 0055 model.setEndDate({2020, 11, 9}); 0056 0057 QCOMPARE(model.rowCount(), 7); 0058 for (int i = 0; i < model.rowCount(); ++i) { 0059 const auto idx = model.index(i, 0); 0060 const auto dt = idx.data(IntervalModel::DateRole).toDate(); 0061 QCOMPARE(dt, QDate(2020, 11, 2).addDays(i)); 0062 const auto intervals = idx.data(IntervalModel::IntervalsRole).value<std::vector<Interval>>(); 0063 QCOMPARE(intervals.size(), 1); 0064 0065 QCOMPARE(intervals.front().begin(), QDateTime(dt, {0, 0})); 0066 QCOMPARE(intervals.back().end(), QDateTime(dt.addDays(1), {0, 0})); 0067 } 0068 } 0069 0070 void testOpenEndTime() 0071 { 0072 IntervalModel model; 0073 QAbstractItemModelTester modelTest(&model); 0074 0075 OpeningHours oh("23:00-01:00+"); 0076 QCOMPARE(oh.error(), OpeningHours::NoError); 0077 0078 model.setOpeningHours(oh); 0079 model.setBeginDate({2020, 11, 2}); 0080 model.setEndDate({2020, 11, 3}); 0081 0082 QCOMPARE(model.rowCount(), 1); 0083 const auto intervals = model.index(0, 0).data(IntervalModel::IntervalsRole).value<std::vector<Interval>>(); 0084 QCOMPARE(intervals.size(), 3); 0085 QVERIFY(intervals[0].hasOpenEndTime()); 0086 QVERIFY(!intervals[1].hasOpenEndTime()); 0087 QVERIFY(!intervals[2].hasOpenEndTime()); 0088 QCOMPARE(intervals[0].estimatedEnd(), intervals[1].begin()); 0089 QCOMPARE(intervals[1].end(), intervals[2].begin()); 0090 QVERIFY(intervals[0].end() < intervals[0].estimatedEnd()); 0091 0092 QCOMPARE(intervals[0].state(), Interval::Open); 0093 QCOMPARE(intervals[1].state(), Interval::Closed); 0094 QCOMPARE(intervals[2].state(), Interval::Open); 0095 } 0096 0097 void testPermanentlyClosed() 0098 { 0099 IntervalModel model; 0100 QAbstractItemModelTester modelTest(&model); 0101 0102 OpeningHours oh("Mo-Su off"); 0103 QCOMPARE(oh.error(), OpeningHours::NoError); 0104 0105 model.setOpeningHours(oh); 0106 model.setBeginDate({2022, 12, 1}); 0107 model.setEndDate({2022, 12, 2}); 0108 0109 QCOMPARE(model.rowCount(), 1); 0110 const auto intervals = model.index(0, 0).data(IntervalModel::IntervalsRole).value<std::vector<Interval>>(); 0111 QCOMPARE(intervals.size(), 1); 0112 QCOMPARE(intervals[0].begin(), QDateTime({ 2022, 12, 1 }, {0, 0})); 0113 QCOMPARE(intervals[0].end(), QDateTime({ 2022, 12, 2 }, {0, 0})); 0114 QCOMPARE(intervals[0].state(), Interval::Closed); 0115 } 0116 }; 0117 0118 QTEST_GUILESS_MAIN(IntervalModelTest) 0119 0120 #include "intervalmodeltest.moc"