Skip to content

Commit

Permalink
Use Service Inventory API (#90)
Browse files Browse the repository at this point in the history
  • Loading branch information
sluFicodes committed Sep 24, 2024
1 parent d355080 commit b86c4b8
Show file tree
Hide file tree
Showing 2 changed files with 113 additions and 23 deletions.
33 changes: 15 additions & 18 deletions src/wstore/ordering/inventory_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -205,24 +205,21 @@ def create_resource(self, resource_id, customer_party):
def create_service(self, service_id, customer_party):
# Get service specification
service_spec = self.download_spec(settings.SERVICE_CATALOG, '/serviceSpecification', service_id)

# TODO: Replace this code when the service inventory is available
from wstore.service.models import Service

inv_service_id = 'urn:ngsi-ld:Service:{}'.format(str(uuid4()))
service = Service(
uuid = inv_service_id,
startDate = datetime.now(),
party_id = customer_party["id"],
state = "reserved",
characteristics = [self.build_inventory_char(char, "characteristicValueSpecification") for char in service_spec["specCharacteristic"]]
)

service = {
"serviceCharacteristic": [self.build_inventory_char(char, "characteristicValueSpecification") for char in service_spec["specCharacteristic"]],
"relatedParty": [customer_party],
"state": "reserved",
"startDate": datetime.now().isoformat() + "Z"
}
if "name" in service_spec:
service.name = service_spec["name"]
service["name"] = service_spec["name"]

if "description" in service_spec:
service.description = service_spec["description"]

service.save()
return inv_service_id
service["description"] = service_spec["description"]
inventory = urlparse(settings.SERVICE_INVENTORY)
resource_url = "{}://{}{}".format(inventory.scheme, inventory.netloc, inventory.path + '/service')

inv_response = requests.post(resource_url, json=service, verify=settings.VERIFY_REQUESTS)
inv_service = inv_response.json()
return inv_service["id"]

103 changes: 98 additions & 5 deletions src/wstore/ordering/tests/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
from copy import deepcopy
from datetime import datetime
from urllib.parse import urlparse

from datetime import datetime
from bson.objectid import ObjectId
from django.contrib.auth.models import User
from django.core.exceptions import ImproperlyConfigured
Expand Down Expand Up @@ -953,7 +953,13 @@ def test_get_contracts(self):
@override_settings(INVENTORY="http://localhost:8080")
class InventoryClientTestCase(TestCase):
tags = ("inventory",)


build_char_return = {
"id": "testing_uuid",
"name": "testing_name",
"valueType": "testing_type",
"value": "testing_value"
}
def setUp(self):
# Mock requests
inventory_client.requests = MagicMock()
Expand All @@ -964,12 +970,16 @@ def setUp(self):

inventory_client.settings.LOCAL_SITE = "http://localhost:8004/"

from datetime import datetime

now = datetime(2016, 1, 22, 4, 10, 25, 176751)
inventory_client.datetime = MagicMock()
inventory_client.datetime.return_value.now.isoformat = MagicMock()
inventory_client.datetime.utcnow.return_value = now

inventory_client.settings.RESOURCE_INVENTORY = "http://testing-resource-inventory:8080"
inventory_client.settings.SERVICE_INVENTORY = "http://testing-service-inventory:8080"
inventory_client.settings.RESOURCE_CATALOG = "http://testing-resource-catalog:8080"
inventory_client.settings.SERVICE_CATALOG = "http://testing-service-catalog:8080"
inventory_client.settings.VERIFY_REQUESTS = True

@parameterized.expand(
[
("basic", [{"callback": "http://site.com/event"}]),
Expand Down Expand Up @@ -1088,3 +1098,86 @@ def test_get_products(self, name, query, qs):
inventory_client.requests.get().raise_for_status.assert_called_once_with()

self.assertEquals(inventory_client.requests.get().json(), products)

@parameterized.expand([("32", None, {
"name": "resource",
"description": "testing",
"resourceSpecCharacteristic": [{
"resourceSpecCharacteristicValue": [{
"value": "testing_value"
}]
}]
})])
def test_create_resource(self, spec_id, party, spec_res):
inventory_client.urlparse = MagicMock()
inventory_client.urlparse.return_value.scheme = "scheme"
inventory_client.urlparse.return_value.netloc = "netloc"
inventory_client.urlparse.return_value.path = "path"
inventory_client.datetime.now.return_value = MagicMock()
inventory_client.datetime.now.return_value.isoformat.return_value = "2024-03-19T11:49:50"
client = inventory_client.InventoryClient()
client.download_spec = MagicMock()
client.download_spec.return_value = spec_res
client.build_inventory_char = MagicMock()
client.build_inventory_char.return_value = self.build_char_return
client.create_resource(spec_id, party)
self.assertEquals(1, inventory_client.urlparse.call_count)
expected_calls_urlparse = [
call(inventory_client.settings.RESOURCE_INVENTORY),
]
inventory_client.urlparse.assert_has_calls(expected_calls_urlparse, any_order=True)
expected_calls_post = [call("scheme://netlocpath/resource", json={
"resourceCharacteristic": [self.build_char_return for _ in spec_res["resourceSpecCharacteristic"]],
"relatedParty": [party],
"resourceStatus": "reserved",
"startOperatingDate": "2024-03-19T11:49:50Z",
"name": spec_res["name"],
"description": spec_res["description"]

}, verify = inventory_client.settings.VERIFY_REQUESTS)]
client.build_inventory_char.assert_called_once()
inventory_client.requests.post.assert_has_calls(expected_calls_post, any_order=True)


@parameterized.expand([("32", None, {
"name": "service",
"description": "testing",
"specCharacteristic": [{
"characteristicValueSpecification": [{
"value": "testing_value"
}]
}]
})])
def test_create_service(self, spec_id, party, spec_serv):
inventory_client.urlparse = MagicMock()
inventory_client.urlparse.return_value.scheme = "scheme"
inventory_client.urlparse.return_value.netloc = "netloc"
inventory_client.urlparse.return_value.path = "path"
inventory_client.datetime.now.return_value = MagicMock()
inventory_client.datetime.now.return_value.isoformat.return_value = "2024-03-19T11:49:50"
client = inventory_client.InventoryClient()
client.download_spec = MagicMock()
client.download_spec.return_value = spec_serv
client.build_inventory_char = MagicMock()
client.build_inventory_char.return_value = self.build_char_return
client.create_service(spec_id, party)
self.assertEquals(1, inventory_client.urlparse.call_count)
expected_calls_urlparse = [
call(inventory_client.settings.SERVICE_INVENTORY),
]
inventory_client.urlparse.assert_has_calls(expected_calls_urlparse, any_order=True)
expected_calls_post = [call("scheme://netlocpath/service", json={
"serviceCharacteristic": [self.build_char_return for _ in spec_serv["specCharacteristic"]],
"relatedParty": [party],
"state": "reserved",
"startDate": "2024-03-19T11:49:50Z",
"name": spec_serv["name"],
"description": spec_serv["description"]

}, verify = inventory_client.settings.VERIFY_REQUESTS)]
client.build_inventory_char.assert_called_once()
inventory_client.requests.post.assert_has_calls(expected_calls_post, any_order=True)


0 comments on commit b86c4b8

Please sign in to comment.