Skip to content

Commit 96ac246

Browse files
authored
Merge pull request #152 from release-engineering/diff
feature: Add "offline" diff for AzureService
2 parents 1923c12 + 36e8e96 commit 96ac246

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

cloudpub/ms_azure/service.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,21 @@ def diff_offer(self, product: Product, target: str) -> DeepDiff:
437437
remote = self.get_product(product.id, target=target)
438438
return DeepDiff(remote.to_json(), product.to_json(), exclude_regex_paths=self.DIFF_EXCLUDES)
439439

440+
def diff_two_offers(self, last_offer: Product, prev_offer: Product) -> DeepDiff:
441+
"""Compute the difference between two provided products.
442+
443+
Args:
444+
last_offer (Product)
445+
The lastest offer state to diff
446+
prev_offer (Product)
447+
The previous offer state to diff
448+
Returns:
449+
DeepDiff: The diff data.
450+
"""
451+
return DeepDiff(
452+
prev_offer.to_json(), last_offer.to_json(), exclude_regex_paths=self.DIFF_EXCLUDES
453+
)
454+
440455
def submit_to_status(
441456
self, product_id: str, status: str, resources: Optional[List[AzureResource]] = None
442457
) -> ConfigureStatus:

tests/ms_azure/test_service.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,25 @@ def test_diff_offer_changed(
578578
},
579579
}
580580

581+
def test_diff_two_offers_changed(
582+
self,
583+
azure_service: AzureService,
584+
product_obj: Product,
585+
) -> None:
586+
data_product = deepcopy(product_obj.to_json())
587+
data_product["resources"][0]["id"] = "product/foo/bar"
588+
last_offer = Product.from_json(data_product)
589+
590+
diff = azure_service.diff_two_offers(last_offer, product_obj)
591+
assert diff == {
592+
'values_changed': {
593+
"root['resources'][0]['id']": {
594+
'new_value': 'product/foo/bar',
595+
'old_value': 'product/ffffffff-ffff-ffff-ffff-ffffffffffff',
596+
},
597+
},
598+
}
599+
581600
@pytest.mark.parametrize("target", ["preview", "live", "draft"])
582601
@mock.patch("cloudpub.ms_azure.AzureService.get_product")
583602
@mock.patch("cloudpub.ms_azure.AzureService.products")
@@ -594,6 +613,13 @@ def test_diff_offer_no_change(
594613
mock_getpr.return_value = product_obj
595614
assert azure_service.diff_offer(product_obj, target=target) == {}
596615

616+
def test_diff_two_offers_no_change(
617+
self,
618+
azure_service: AzureService,
619+
product_obj: Product,
620+
) -> None:
621+
assert azure_service.diff_two_offers(product_obj, product_obj) == {}
622+
597623
@mock.patch("cloudpub.ms_azure.AzureService._assert_dict")
598624
def test_get_submissions(
599625
self,

0 commit comments

Comments
 (0)