@isTest
private class AddShipmentManuallyHandlerTest {

    static testMethod void test_createFedExShipments() {

        zkfedex__ShipmatePreference__c preference = new zkfedex__ShipmatePreference__c();
        insert preference;

        ShipmentSettings__c shipmentSettings = new ShipmentSettings__c();
        shipmentSettings.Name = 'FedEx';
        shipmentSettings.Shipment_Preference_Id__c = preference.Id;
        insert shipmentSettings;

        String trackNumber = 'trackNumber';

        Account acc = new Account();
        acc.Name = 'Account';
        insert acc;

        Order ord = new Order();
        ord.FB_Tracking_Numbers__c = trackNumber;
        ord.AccountId = acc.Id;
        ord.Status = 'Draft';
        ord.EffectiveDate = Date.today();
        ord.FB_Carrier__c = 'FedEx';
        
        Test.startTest();
            insert ord;
            checkFedExShipmentExists(trackNumber, ord.EffectiveDate);

            ord.FB_Tracking_Numbers__c = trackNumber + '1';
            update ord;

            checkFedExShipmentExists(trackNumber + '1', ord.EffectiveDate);

        Test.stopTest();
    }


    private static void checkFedExShipmentExists(String trackNumber, Date shipDate){
        List<zkfedex__Shipment__c> shipments = [
            SELECT Id, zkfedex__MasterTrackingId__c, zkfedex__ShipDate__c
            FROM zkfedex__Shipment__c
            WHERE zkfedex__MasterTrackingId__c = :trackNumber
                AND zkfedex__ShipDate__c =: shipDate
            LIMIT 1
        ];

        System.assertEquals(1, shipments.size());
    }
}