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

/**
* 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)
}
}