You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
150 lines
5.5 KiB
150 lines
5.5 KiB
/**
|
|
* DailyNotificationTests.swift
|
|
* Daily Notification Plugin for Capacitor
|
|
*
|
|
* Tests for the DailyNotification plugin
|
|
*/
|
|
|
|
import XCTest
|
|
@testable import DailyNotificationPlugin
|
|
|
|
class DailyNotificationTests: XCTestCase {
|
|
var plugin: DailyNotificationPlugin!
|
|
var powerManager: DailyNotificationPowerManager!
|
|
var maintenanceWorker: DailyNotificationMaintenanceWorker!
|
|
|
|
override func setUp() {
|
|
super.setUp()
|
|
plugin = DailyNotificationPlugin()
|
|
powerManager = DailyNotificationPowerManager.shared
|
|
maintenanceWorker = DailyNotificationMaintenanceWorker.shared
|
|
}
|
|
|
|
override func tearDown() {
|
|
plugin = nil
|
|
super.tearDown()
|
|
}
|
|
|
|
// MARK: - Power Management Tests
|
|
|
|
func testBatteryStatus() {
|
|
let status = powerManager.getBatteryStatus()
|
|
|
|
XCTAssertNotNil(status["level"])
|
|
XCTAssertNotNil(status["isCharging"])
|
|
XCTAssertNotNil(status["lastCheck"])
|
|
XCTAssertNotNil(status["powerState"])
|
|
}
|
|
|
|
func testPowerState() {
|
|
let state = powerManager.getPowerState()
|
|
|
|
XCTAssertNotNil(state["powerState"])
|
|
XCTAssertNotNil(state["adaptiveScheduling"])
|
|
XCTAssertNotNil(state["batteryLevel"])
|
|
XCTAssertNotNil(state["isCharging"])
|
|
XCTAssertNotNil(state["lastCheck"])
|
|
}
|
|
|
|
func testAdaptiveScheduling() {
|
|
powerManager.setAdaptiveScheduling(true)
|
|
let normalInterval = DailyNotificationConfig.SchedulingIntervals.normal
|
|
let criticalInterval = DailyNotificationConfig.SchedulingIntervals.critical
|
|
|
|
// Test with different battery levels
|
|
let intervals = [
|
|
(batteryLevel: 10, expectedInterval: criticalInterval),
|
|
(batteryLevel: 20, expectedInterval: DailyNotificationConfig.SchedulingIntervals.low),
|
|
(batteryLevel: 40, expectedInterval: DailyNotificationConfig.SchedulingIntervals.medium),
|
|
(batteryLevel: 60, expectedInterval: normalInterval)
|
|
]
|
|
|
|
for (level, expected) in intervals {
|
|
// Simulate battery level
|
|
UIDevice.current.setValue(level, forKey: "batteryLevel")
|
|
|
|
let interval = powerManager.getSchedulingInterval()
|
|
XCTAssertEqual(interval, expected, "Interval should be \(expected) for battery level \(level)")
|
|
}
|
|
}
|
|
|
|
// MARK: - Maintenance Tests
|
|
|
|
func testMaintenanceTasks() {
|
|
// Test cleanup of old notifications
|
|
let oldDate = Date().addingTimeInterval(-Double(DailyNotificationConfig.shared.retentionDays * 24 * 60 * 60 + 1))
|
|
|
|
// Create a test notification
|
|
let content = UNMutableNotificationContent()
|
|
content.title = "Test Notification"
|
|
content.body = "This is a test notification"
|
|
|
|
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false)
|
|
let request = UNNotificationRequest(
|
|
identifier: "test-notification",
|
|
content: content,
|
|
trigger: trigger
|
|
)
|
|
|
|
let expectation = XCTestExpectation(description: "Cleanup old notifications")
|
|
|
|
UNUserNotificationCenter.current().add(request) { error in
|
|
XCTAssertNil(error)
|
|
|
|
// Perform maintenance
|
|
self.maintenanceWorker.performMaintenance()
|
|
|
|
// Verify cleanup
|
|
UNUserNotificationCenter.current().getDeliveredNotifications { notifications in
|
|
let oldNotifications = notifications.filter { $0.date < oldDate }
|
|
XCTAssertTrue(oldNotifications.isEmpty, "Old notifications should be cleaned up")
|
|
expectation.fulfill()
|
|
}
|
|
}
|
|
|
|
wait(for: [expectation], timeout: 5.0)
|
|
}
|
|
|
|
// MARK: - Configuration Tests
|
|
|
|
func testConfiguration() {
|
|
let config = DailyNotificationConfig.shared
|
|
|
|
// Test default values
|
|
XCTAssertEqual(config.maxNotificationsPerDay, 10)
|
|
XCTAssertEqual(config.retentionDays, 7)
|
|
XCTAssertTrue(config.loggingEnabled)
|
|
XCTAssertTrue(config.adaptiveSchedulingEnabled)
|
|
|
|
// Test validation
|
|
XCTAssertThrowsError(try config.setMaxNotificationsPerDay(0))
|
|
XCTAssertThrowsError(try config.setRetentionDays(0))
|
|
|
|
// Test reset
|
|
config.resetToDefaults()
|
|
XCTAssertEqual(config.maxNotificationsPerDay, 10)
|
|
XCTAssertEqual(config.retentionDays, 7)
|
|
XCTAssertTrue(config.loggingEnabled)
|
|
XCTAssertTrue(config.adaptiveSchedulingEnabled)
|
|
}
|
|
|
|
// MARK: - Constants Tests
|
|
|
|
func testConstants() {
|
|
// Test default values
|
|
XCTAssertEqual(DailyNotificationConstants.defaultTitle, "Daily Notification")
|
|
XCTAssertEqual(DailyNotificationConstants.defaultBody, "Your daily update is ready")
|
|
|
|
// Test notification identifier prefix
|
|
XCTAssertTrue(DailyNotificationConstants.notificationIdentifierPrefix.hasPrefix("daily-notification-"))
|
|
|
|
// Test event name
|
|
XCTAssertEqual(DailyNotificationConstants.eventName, "notification")
|
|
|
|
// Test settings defaults
|
|
XCTAssertTrue(DailyNotificationConstants.Settings.defaultSound)
|
|
XCTAssertEqual(DailyNotificationConstants.Settings.defaultPriority, "default")
|
|
XCTAssertEqual(DailyNotificationConstants.Settings.defaultRetryCount, 3)
|
|
XCTAssertEqual(DailyNotificationConstants.Settings.defaultRetryInterval, 1000)
|
|
}
|
|
}
|