@@ -155,6 +155,82 @@ class ShippingLabelPackageItemViewModelTests: XCTestCase {
155155 // Then
156156 XCTAssertTrue ( viewModel. packageListViewModel. showCustomPackagesHeader)
157157 }
158+
159+ func test_totalWeight_returns_the_expected_value( ) {
160+ // Given
161+ let orderItemAttributes = [ OrderItemAttribute ( metaID: 170 , name: " Packaging " , value: " Box " ) ]
162+ let items = [ MockOrderItem . sampleItem ( name: " Easter Egg " , productID: 1 , quantity: 0.5 ) ,
163+ MockOrderItem . sampleItem ( name: " Jacket " , productID: 33 , quantity: 1 ) ,
164+ MockOrderItem . sampleItem ( name: " Italian Jacket " , productID: 23 , quantity: 2 ) ,
165+ MockOrderItem . sampleItem ( name: " Jeans " ,
166+ productID: 49 ,
167+ variationID: 49 ,
168+ quantity: 1 ,
169+ attributes: orderItemAttributes) ]
170+ let order = MockOrders ( ) . makeOrder ( ) . copy ( siteID: sampleSiteID, items: items)
171+ let currencyFormatter = CurrencyFormatter ( currencySettings: CurrencySettings ( ) )
172+
173+ // When
174+ let product1 = Product . fake ( ) . copy ( siteID: sampleSiteID, productID: 1 , virtual: false , weight: " 120 " )
175+ let product2 = Product . fake ( ) . copy ( siteID: sampleSiteID, productID: 33 , virtual: true , weight: " 9 " )
176+ let product3 = Product . fake ( ) . copy ( siteID: sampleSiteID, productID: 23 , virtual: false , weight: " 1.44 " )
177+ let variation = ProductVariation . fake ( ) . copy ( siteID: sampleSiteID,
178+ productID: 49 ,
179+ productVariationID: 49 ,
180+ attributes: [ ProductVariationAttribute ( id: 1 , name: " Color " , option: " Blue " ) ] )
181+
182+ let viewModel = ShippingLabelPackageItemViewModel ( order: order,
183+ orderItems: order. items,
184+ packagesResponse: mockPackageResponse ( ) ,
185+ selectedPackageID: " Box " ,
186+ totalWeight: " " ,
187+ products: [ product1, product2, product3] ,
188+ productVariations: [ variation] ,
189+ onPackageSwitch: { _ in } ,
190+ formatter: currencyFormatter,
191+ weightUnit: " kg " )
192+
193+ // Then
194+ XCTAssertEqual ( viewModel. totalWeight, " 72.88 " )
195+ }
196+
197+ func test_totalWeight_returns_the_expected_value_when_already_set( ) {
198+ // Given
199+ let orderItemAttributes = [ OrderItemAttribute ( metaID: 170 , name: " Packaging " , value: " Box " ) ]
200+ let items = [ MockOrderItem . sampleItem ( name: " Easter Egg " , productID: 1 , quantity: 1 ) ,
201+ MockOrderItem . sampleItem ( name: " Jacket " , productID: 33 , quantity: 1 ) ,
202+ MockOrderItem . sampleItem ( name: " Italian Jacket " , productID: 23 , quantity: 2 ) ,
203+ MockOrderItem . sampleItem ( name: " Jeans " ,
204+ productID: 49 ,
205+ variationID: 49 ,
206+ quantity: 1 ,
207+ attributes: orderItemAttributes) ]
208+ let order = MockOrders ( ) . makeOrder ( ) . copy ( siteID: sampleSiteID, items: items)
209+ let currencyFormatter = CurrencyFormatter ( currencySettings: CurrencySettings ( ) )
210+
211+ // When
212+ let product1 = Product . fake ( ) . copy ( siteID: sampleSiteID, productID: 1 , virtual: false , weight: " 123 " )
213+ let product2 = Product . fake ( ) . copy ( siteID: sampleSiteID, productID: 33 , virtual: true , weight: " 9 " )
214+ let product3 = Product . fake ( ) . copy ( siteID: sampleSiteID, productID: 23 , virtual: false , weight: " 1 " )
215+ let variation = ProductVariation . fake ( ) . copy ( siteID: sampleSiteID,
216+ productID: 49 ,
217+ productVariationID: 49 ,
218+ attributes: [ ProductVariationAttribute ( id: 1 , name: " Color " , option: " Blue " ) ] )
219+
220+ let viewModel = ShippingLabelPackageItemViewModel ( order: order,
221+ orderItems: order. items,
222+ packagesResponse: mockPackageResponse ( ) ,
223+ selectedPackageID: " Box " ,
224+ totalWeight: " 30 " ,
225+ products: [ product1, product2, product3] ,
226+ productVariations: [ variation] ,
227+ onPackageSwitch: { _ in } ,
228+ formatter: currencyFormatter,
229+ weightUnit: " kg " )
230+
231+ // Then
232+ XCTAssertEqual ( viewModel. totalWeight, " 30 " )
233+ }
158234}
159235
160236// MARK: - Mocks
0 commit comments