@isTest
private class EventToEventDetailsScheduleTest {
	 @TestSetup
    static void makeData(){

        Date toDayTime = Date.today();
    	
    	Account hospital = new Account();
        hospital.recordtypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'Account' and DeveloperName = 'HP'].id;
        hospital.Name = 'hospitalabc';
        hospital.Is_Active__c = '有効';
        hospital.Attribute_Type__c = '卫生部';
        hospital.Speciality_Type__c = '综合医院';
        hospital.Grade__c = '一级';
        hospital.IF_Coverage_Target_HP__c = '1';
        hospital.OCM_Category__c = 'SLTV';
        hospital.Is_Medical__c = '医疗机构';
        hospital.Town__c = '东京';
        Oly_TriggerHandler.bypass('NFM701ControllerHandler');
        Oly_TriggerHandler.bypass('UpdateContractAimAmountHandler');
        insert hospital;

        Product2 pro1 = new Product2(Name='name01',IsActive=true,Family='GI',
                Fixture_Model_No__c='n01',Serial_Lot_No__c='S/N tracing',
                Fixture_Model_No_T__c = 'n01',
                Maintenance_Price_Year__c = 999,
                Extend_Gurantee_Start_MD__c = Date.newInstance(toDayTime.year(),3,2),
                Extend_Gurantee_End_MD__c = Date.newInstance(3999,12,31),
                Extend_new_product_gurantee_MD__c = true,
                PartSupplyFinishDate__c  = Date.newInstance(toDayTime.year()+2,3,2),
                ProductCode_Ext__c='pc01',Manual_Entry__c=false,Brand_Name__c='奥林巴斯',
                Category2__c='本体',
                Category3__c='电子镜');
        insert pro1;

        Account[] strategicDep = [SELECT ID, Name FROM Account WHERE parentId = :hospital.Id AND recordType.DeveloperName = 'Department_Class_OTH'];
        // 診療科を作る
        Account dep = new Account();
        dep.recordtypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'Account' and DeveloperName = 'Department_OTH'].id;
        dep.Name = 'test dep';
        dep.AgentCode_Ext__c = System.Label.Account_Asset_FJZ;
        dep.ParentId = strategicDep[0].Id;
        dep.Department_Class__c = strategicDep[0].Id;
        dep.Hospital__c = hospital.Id;
        Oly_TriggerHandler.bypass('NFM701ControllerHandler');
        Oly_TriggerHandler.bypass('UpdateContractAimAmountHandler');
        insert dep;
        Asset assetA1 = new Asset(Asset_Owner__c = 'Olympus');
        assetA1.RecordTypeId = System.Label.Asset_RecordType;
        assetA1.SerialNumber = 'ass01';
        assetA1.Name = 'ass01';
        assetA1.AccountId = dep.Id;
        assetA1.Guarantee_period_for_products__c = toDayTime;
        assetA1.Hospital__c = hospital.Id;
        assetA1.Product2Id = pro1.Id;
        assetA1.Quantity = 1;
        assetA1.IF_Coverage_Target_Asset__c  = '1';
        insert assetA1;

	}


    static testMethod void myUnitTest() {
    	// List<Asset> Assets = [SELECT Id,Hospital__c,Product2.ServiceCategory__c,Product2.Maintenance_Price_Year__c 
     //    				   	  FROM Asset WHERE IF_Coverage_Target_Asset__c = '1'];

				// This test runs a scheduled job at midnight Sept. 3rd. 2022
		String CRON_EXP = '0 0 0 3 9 ? 2023';
		//System.Test.startTest();
		// Schedule the test job
		String jobId =
		    system.schedule('EventToEventDetailsScheduleTest',
		                    CRON_EXP,
		                    new EventToEventDetailsSchedule());
		// Get the information from the CronTrigger API object
		CronTrigger ct =
		    [SELECT Id, CronExpression, TimesTriggered, NextFireTime
		     FROM CronTrigger
		     WHERE id = :jobId];
		// Verify the expressions are the same
		System.assertEquals(CRON_EXP, ct.CronExpression);
		// Verify the job has not run
		System.assertEquals(0, ct.TimesTriggered);
		// Verify the next time the job will run
		System.assertEquals('2023-09-03 00:00:00',
		                    String.valueOf(ct.NextFireTime));
		//System.Test.stopTest();
	}
}