@@ -11,7 +11,12 @@ const {
11
11
expectToThrowAuthenticationErrorToResult,
12
12
} = require ( '@open-condo/keystone/test.utils' )
13
13
14
- const { COLD_WATER_METER_RESOURCE_ID , METER_READING_SOURCE_INTERNAL_IMPORT_TYPE } = require ( '@condo/domains/meter/constants/constants' )
14
+ const {
15
+ COLD_WATER_METER_RESOURCE_ID ,
16
+ HOT_WATER_METER_RESOURCE_ID ,
17
+ METER_READING_SOURCE_INTERNAL_IMPORT_TYPE ,
18
+ }
19
+ = require ( '@condo/domains/meter/constants/constants' )
15
20
const {
16
21
_internalDeleteMeterAndMeterReadingsByTestClient,
17
22
createTestMeterReading,
@@ -29,7 +34,7 @@ const {
29
34
makeClientWithServiceUser,
30
35
} = require ( '@condo/domains/user/utils/testSchema' )
31
36
32
-
37
+
33
38
describe ( 'DeleteMeterAndMeterReadingsService' , ( ) => {
34
39
let adminClient , supportClient , residentClient , staffClient , serviceClient , anonymous ,
35
40
payload , organization , property , resource , source ,
@@ -136,7 +141,7 @@ describe('DeleteMeterAndMeterReadingsService', () => {
136
141
} )
137
142
138
143
describe ( 'Basic logic' , ( ) => {
139
- test ( 'Meters for all properties in organization should be deleted if the "propertyIds" is not specified' , async ( ) => {
144
+ test ( 'Meters for all properties in organization should be deleted if no "propertyIds" and "resourcesIds" specified' , async ( ) => {
140
145
const [ property2 ] = await createTestProperty ( adminClient , organization )
141
146
const [ meter2 ] = await createTestMeter ( adminClient , organization , property2 , resource , { } )
142
147
await createTestMeterReading ( adminClient , meter2 , source )
@@ -170,6 +175,65 @@ describe('DeleteMeterAndMeterReadingsService', () => {
170
175
expect ( deletedMeters [ 0 ] . id ) . toBe ( meter2 . id )
171
176
} )
172
177
178
+ test ( 'Meters should be deleted only if meter resource is specified in "resourcesIds"' , async ( ) => {
179
+ const [ resource2 ] = await MeterResource . getAll ( adminClient , { id : HOT_WATER_METER_RESOURCE_ID } )
180
+ const [ meter2 ] = await createTestMeter ( adminClient , organization , property , resource2 , { } )
181
+ await createTestMeterReading ( adminClient , meter2 , source )
182
+
183
+ const [ result ] = await _internalDeleteMeterAndMeterReadingsByTestClient ( adminClient , {
184
+ ...payload ,
185
+ resourcesIds : [ resource . id ] ,
186
+ } )
187
+ expect ( result ) . toEqual ( expect . objectContaining ( {
188
+ status : 'success' ,
189
+ metersToDelete : 1 ,
190
+ deletedMeters : 1 ,
191
+ } ) )
192
+ const meters = await Meter . getAll ( adminClient , { id_in : [ meter . id , meter2 . id ] } )
193
+ expect ( meters ) . toHaveLength ( 1 )
194
+ expect ( meters [ 0 ] . id ) . toBe ( meter2 . id )
195
+ } )
196
+
197
+ test ( 'Meters should be deleted only if meter resource is specified in "resourcesIds" and property is specified in "propertyIds"' , async ( ) => {
198
+ const [ resource2 ] = await MeterResource . getAll ( adminClient , { id : HOT_WATER_METER_RESOURCE_ID } )
199
+ const [ meter2 ] = await createTestMeter ( adminClient , organization , property , resource2 , { } )
200
+ await createTestMeterReading ( adminClient , meter2 , source )
201
+
202
+ const [ property2 ] = await createTestProperty ( adminClient , organization )
203
+ const [ meter3 ] = await createTestMeter ( adminClient , organization , property2 , resource2 , { } )
204
+ await createTestMeterReading ( adminClient , meter3 , source )
205
+
206
+ // Be sure that no meters will be deleted if no meters contains passed property and resource
207
+ const [ result1 ] = await _internalDeleteMeterAndMeterReadingsByTestClient ( adminClient , {
208
+ ...payload ,
209
+ propertyIds : [ property2 . id ] ,
210
+ resourcesIds : [ resource . id ] ,
211
+ } )
212
+ expect ( result1 ) . toEqual ( expect . objectContaining ( {
213
+ status : 'success' ,
214
+ metersToDelete : 0 ,
215
+ deletedMeters : 0 ,
216
+ } ) )
217
+
218
+ // Be sure that we delete only one meter with both: property and resource
219
+ const [ result2 ] = await _internalDeleteMeterAndMeterReadingsByTestClient ( adminClient , {
220
+ ...payload ,
221
+ propertyIds : [ property . id ] ,
222
+ resourcesIds : [ resource2 . id ] ,
223
+ } )
224
+ expect ( result2 ) . toEqual ( expect . objectContaining ( {
225
+ status : 'success' ,
226
+ metersToDelete : 1 ,
227
+ deletedMeters : 1 ,
228
+ } ) )
229
+
230
+ const meters = await Meter . getAll ( adminClient , { id_in : [ meter . id , meter2 . id , meter3 . id ] } )
231
+ expect ( meters ) . toEqual ( [
232
+ expect . objectContaining ( { id : meter . id } ) ,
233
+ expect . objectContaining ( { id : meter3 . id } ) ,
234
+ ] )
235
+ } )
236
+
173
237
test ( 'Should delete a lot of meters' , async ( ) => {
174
238
const createdMetersIds = [ meter . id ]
175
239
@@ -190,4 +254,4 @@ describe('DeleteMeterAndMeterReadingsService', () => {
190
254
expect ( deletedMeters ) . toHaveLength ( 0 )
191
255
} )
192
256
} )
193
- } )
257
+ } )
0 commit comments