@@ -836,6 +836,76 @@ final class WooShippingShipmentDetailsViewModelTests: XCTestCase {
836836 XCTAssertEqual ( customsItemViewModel. selectedCountry? . code, expectedCountry)
837837 }
838838
839+ func test_customs_form_is_incomplete_when_destination_country_is_eu_and_hsTariffNumber_is_empty( ) throws {
840+ // Given
841+ let stores = MockStoresManager ( sessionManager: . testingInstance)
842+ let storageManager = MockStorageManager ( )
843+
844+ let originAddressSubject = PassthroughSubject < WooShippingAddress ? , Never > ( )
845+ let destinationAddressSubject = PassthroughSubject < WooShippingAddress ? , Never > ( )
846+
847+ let usCountry = Country ( code: " US " , name: " United States " , states: [ ] )
848+ let caCountry = Country ( code: " CA " , name: " Canada " , states: [ ] )
849+ let euCountries = [
850+ Country ( code: " FR " , name: " France " , states: [ ] ) ,
851+ Country ( code: " DE " , name: " Germany " , states: [ ] ) ,
852+ Country ( code: " ES " , name: " Spain " , states: [ ] ) ,
853+ Country ( code: " IT " , name: " Italy " , states: [ ] ) ,
854+ Country ( code: " NL " , name: " Netherlands " , states: [ ] )
855+ ]
856+ storageManager. insertSampleCountries ( readOnlyCountries: [ usCountry, caCountry] + euCountries)
857+
858+ let item = ShippingLabelPackageItem (
859+ productOrVariationID: 1 ,
860+ orderItemID: 1 ,
861+ name: " Test Item " ,
862+ weight: 1 ,
863+ quantity: 1 ,
864+ value: 10 , // low value, shouldn't require HS Tariff # based on value
865+ dimensions: . fake( ) ,
866+ attributes: [ ] ,
867+ imageURL: nil
868+ )
869+ let shipment = Shipment (
870+ contents: [ CollapsibleShipmentItemCardViewModel ( item: item, currency: " USD " ) ] ,
871+ currency: " USD " ,
872+ currencySettings: ServiceLocator . currencySettings,
873+ shippingSettingsService: ServiceLocator . shippingSettingsService
874+ )
875+
876+ let viewModel = WooShippingShipmentDetailsViewModel (
877+ order: Order . fake ( ) ,
878+ shipment: shipment,
879+ shippingLabel: nil ,
880+ originAddress: originAddressSubject. eraseToAnyPublisher ( ) ,
881+ destinationAddress: destinationAddressSubject. eraseToAnyPublisher ( ) ,
882+ stores: stores,
883+ storageManager: storageManager
884+ )
885+
886+ // When
887+ let itemViewModel = viewModel. customsFormViewModel. itemsViewModels [ 0 ]
888+ itemViewModel. hsTariffNumber = " " // Empty tariff number
889+
890+ originAddressSubject. send ( sampleOriginAddress ( country: usCountry. code, state: " " ) )
891+ destinationAddressSubject. send ( sampleDestinationAddress ( country: caCountry. code, state: " " ) )
892+
893+ // Then: HS Tariff number should not be required for non EU destination countries regardless of value
894+ XCTAssertTrue (
895+ itemViewModel. requiredInformationIsEntered,
896+ " HS Tariff number should not be required for \( usCountry. name) "
897+ )
898+
899+ // And: HS Tariff number should be required for EU countries regardless of value
900+ for euCountry in euCountries {
901+ destinationAddressSubject. send ( sampleDestinationAddress ( country: euCountry. code, state: " " ) )
902+ XCTAssertFalse (
903+ itemViewModel. requiredInformationIsEntered,
904+ " HS Tariff number should be required for \( euCountry. name) "
905+ )
906+ }
907+ }
908+
839909 func test_package_contains_complete_customs_form_when_required_data_is_prefilled( ) throws {
840910 // Setup
841911 let originAddressSubject = PassthroughSubject < WooShippingAddress ? , Never > ( )
0 commit comments