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