File indexing completed on 2024-04-21 03:52:39

0001 /*
0002   This file is part of the kcalcore library.
0003 
0004   SPDX-FileCopyrightText: 2015 Sandro Knauß <sknauss@kde.org>
0005 
0006   SPDX-License-Identifier: LGPL-2.0-or-later
0007 */
0008 
0009 #include "testcalendarobserver.h"
0010 #include "calendar.h"
0011 #include "filestorage.h"
0012 #include "memorycalendar.h"
0013 
0014 #include <QSignalSpy>
0015 #include <QTest>
0016 #include <QTimeZone>
0017 
0018 QTEST_MAIN(CalendarObserverTest)
0019 
0020 using namespace KCalendarCore;
0021 Q_DECLARE_METATYPE(KCalendarCore::Incidence::Ptr)
0022 Q_DECLARE_METATYPE(const Calendar *)
0023 
0024 class SimpleObserver : public QObject, public Calendar::CalendarObserver
0025 {
0026     Q_OBJECT
0027 public:
0028     SimpleObserver(Calendar *cal, QObject *parent = nullptr)
0029         : QObject(parent)
0030         , mCal(cal)
0031     {
0032     }
0033 
0034     Calendar *mCal = nullptr;
0035 Q_SIGNALS:
0036     void incidenceAdded(const KCalendarCore::Incidence::Ptr &incidence);
0037     void incidenceChanged(const KCalendarCore::Incidence::Ptr &incidence);
0038     void incidenceAboutToBeDeleted(const KCalendarCore::Incidence::Ptr &incidence);
0039     void incidenceDeleted(const KCalendarCore::Incidence::Ptr &incidence, const Calendar *calendar);
0040 
0041 protected:
0042     void calendarIncidenceAdded(const KCalendarCore::Incidence::Ptr &incidence) override
0043     {
0044         Q_EMIT incidenceAdded(incidence);
0045     }
0046 
0047     void calendarIncidenceChanged(const KCalendarCore::Incidence::Ptr &incidence) override
0048     {
0049         Q_EMIT incidenceChanged(incidence);
0050     }
0051 
0052     void calendarIncidenceAboutToBeDeleted(const KCalendarCore::Incidence::Ptr &incidence) override
0053     {
0054         QVERIFY(mCal->incidences().contains(incidence));
0055         Q_EMIT incidenceAboutToBeDeleted(incidence);
0056     }
0057 
0058     void calendarIncidenceDeleted(const KCalendarCore::Incidence::Ptr &incidence, const Calendar *calendar) override
0059     {
0060         QCOMPARE(calendar, mCal);
0061         QVERIFY(!calendar->incidences().contains(incidence));
0062         Q_EMIT incidenceDeleted(incidence, calendar);
0063     }
0064 };
0065 
0066 void CalendarObserverTest::testAdd()
0067 {
0068     qRegisterMetaType<KCalendarCore::Incidence::Ptr>();
0069     MemoryCalendar::Ptr cal(new MemoryCalendar(QTimeZone::utc()));
0070     SimpleObserver ob(cal.data());
0071     QSignalSpy spy(&ob, &SimpleObserver::incidenceAdded);
0072     cal->registerObserver(&ob);
0073     Event::Ptr event1 = Event::Ptr(new Event());
0074     event1->setUid(QStringLiteral("1"));
0075 
0076     cal->addEvent(event1);
0077     QCOMPARE(spy.count(), 1);
0078     QList<QVariant> arguments = spy.takeFirst();
0079     QCOMPARE(arguments.at(0).value<KCalendarCore::Incidence::Ptr>(), static_cast<KCalendarCore::Incidence::Ptr>(event1));
0080 }
0081 
0082 void CalendarObserverTest::testChange()
0083 {
0084     qRegisterMetaType<KCalendarCore::Incidence::Ptr>();
0085     MemoryCalendar::Ptr cal(new MemoryCalendar(QTimeZone::utc()));
0086     SimpleObserver ob(cal.data());
0087     QSignalSpy spy(&ob, &SimpleObserver::incidenceChanged);
0088     cal->registerObserver(&ob);
0089     Event::Ptr event1 = Event::Ptr(new Event());
0090     event1->setUid(QStringLiteral("1"));
0091     cal->addEvent(event1);
0092     QCOMPARE(spy.count(), 0);
0093 
0094     event1->setDescription(QStringLiteral("desc"));
0095     QCOMPARE(spy.count(), 1);
0096     QList<QVariant> arguments = spy.takeFirst();
0097     QCOMPARE(arguments.at(0).value<KCalendarCore::Incidence::Ptr>(), static_cast<KCalendarCore::Incidence::Ptr>(event1));
0098 }
0099 
0100 void CalendarObserverTest::testDelete()
0101 {
0102     qRegisterMetaType<KCalendarCore::Incidence::Ptr>();
0103     qRegisterMetaType<const Calendar *>();
0104     MemoryCalendar::Ptr cal(new MemoryCalendar(QTimeZone::utc()));
0105     SimpleObserver ob(cal.data());
0106     QSignalSpy spy1(&ob, &SimpleObserver::incidenceAboutToBeDeleted);
0107     QSignalSpy spy2(&ob, &SimpleObserver::incidenceDeleted);
0108     cal->registerObserver(&ob);
0109     Event::Ptr event1 = Event::Ptr(new Event());
0110     event1->setUid(QStringLiteral("1"));
0111     cal->addEvent(event1);
0112     QCOMPARE(spy1.count(), 0);
0113     QCOMPARE(spy2.count(), 0);
0114 
0115     cal->deleteEvent(event1);
0116     QCOMPARE(spy1.count(), 1);
0117     QCOMPARE(spy2.count(), 1);
0118     QList<QVariant> arguments = spy1.takeFirst();
0119     QCOMPARE(arguments.at(0).value<KCalendarCore::Incidence::Ptr>(), static_cast<KCalendarCore::Incidence::Ptr>(event1));
0120     arguments = spy2.takeFirst();
0121     QCOMPARE(arguments.at(0).value<KCalendarCore::Incidence::Ptr>(), static_cast<KCalendarCore::Incidence::Ptr>(event1));
0122     QCOMPARE(arguments.at(1).value<const Calendar *>(), cal.data());
0123 }
0124 
0125 #include "moc_testcalendarobserver.cpp"
0126 #include "testcalendarobserver.moc"