diff --git a/test/conftest.py b/test/conftest.py
index c9859e8c5fed66a2fd9e2256d2f8bf720c79b639..34c6a3dd088d125882ef5cf6097da8113ae5cc08 100644
--- a/test/conftest.py
+++ b/test/conftest.py
@@ -53,6 +53,12 @@ class FakerProvider(BaseProvider):
 
         return f"TT#{random_date}{random_int}"
 
+    def geant_gid(self) -> str:
+        return self.generator.numerify("GID-#####")
+
+    def geant_sid(self) -> str:
+        return self.generator.numerify("SID-#####")
+
 
 @pytest.fixture(scope="session")
 def faker() -> Faker:
diff --git a/test/fixtures.py b/test/fixtures.py
index 3dfd2c11be754315c40f3c70fb4a8e79eca96dc1..49fc410913723a01e6bac9d185c4cf3ec76def51 100644
--- a/test/fixtures.py
+++ b/test/fixtures.py
@@ -6,11 +6,14 @@ from orchestrator.domain import SubscriptionModel
 from orchestrator.types import SubscriptionLifecycle, UUIDstr
 
 from gso.products import ProductType
+from gso.products.product_blocks.iptrunk import IptrunkSideBlock, IptrunkType
 from gso.products.product_blocks.router import RouterRole, RouterVendor
 from gso.products.product_blocks.site import SiteTier
-from gso.products.product_types.router import RouterInactive
+from gso.products.product_types.iptrunk import IptrunkInactive
+from gso.products.product_types.router import Router, RouterInactive
 from gso.products.product_types.site import Site, SiteInactive
 from gso.services import subscriptions
+from gso.utils.types.phy_port import PhyPortCapacity
 
 CUSTOMER_ID: UUIDstr = "2f47f65a-0911-e511-80d0-005056956c1a"
 
@@ -122,3 +125,85 @@ def router_subscription_factory(site_subscription_factory, faker):
         return str(router_subscription.subscription_id)
 
     return subscription_create
+
+
+@pytest.fixture
+def iptrunk_side_subscription_factory(router_subscription_factory, faker):
+    def subscription_create(
+        iptrunk_side_node=None,
+        iptrunk_side_ae_iface=None,
+        iptrunk_side_ae_geant_a_sid=None,
+        iptrunk_side_ae_members=None,
+        iptrunk_side_ae_members_description=None,
+    ) -> IptrunkSideBlock:
+        iptrunk_side_node_id = iptrunk_side_node or router_subscription_factory()
+        iptrunk_side_node = Router.from_subscription(iptrunk_side_node_id).router
+        iptrunk_side_ae_iface = iptrunk_side_ae_iface or faker.pystr()
+        iptrunk_side_ae_geant_a_sid = iptrunk_side_ae_geant_a_sid or faker.geant_sid()
+        iptrunk_side_ae_members = iptrunk_side_ae_members or ["ge-0/0/0", "ge-0/0/1"]
+        iptrunk_side_ae_members_description = iptrunk_side_ae_members_description or [
+            faker.sentence(),
+            faker.sentence(),
+        ]
+
+        return IptrunkSideBlock.new(
+            faker.uuid4(),
+            iptrunk_side_node=iptrunk_side_node,
+            iptrunk_side_ae_iface=iptrunk_side_ae_iface,
+            iptrunk_side_ae_geant_a_sid=iptrunk_side_ae_geant_a_sid,
+            iptrunk_side_ae_members=iptrunk_side_ae_members,
+            iptrunk_side_ae_members_description=iptrunk_side_ae_members_description,
+        )
+
+    return subscription_create
+
+
+@pytest.fixture
+def iptrunk_subscription_factory(iptrunk_side_subscription_factory, faker):
+    def subscription_create(
+        description=None,
+        start_date="2023-05-24T00:00:00+00:00",
+        geant_s_sid=None,
+        iptrunk_description=None,
+        iptrunk_type=IptrunkType.DARK_FIBER,
+        iptrunk_speed=PhyPortCapacity.ONE_GIGABIT_PER_SECOND,
+        iptrunk_isis_metric=None,
+        iptrunk_ipv4_network=None,
+        iptrunk_ipv6_network=None,
+        iptrunk_sides=None,
+    ) -> UUIDstr:
+        product_id = subscriptions.get_product_id_by_name(ProductType.IP_TRUNK)
+        description = description or faker.sentence()
+
+        geant_s_sid = geant_s_sid or faker.geant_sid()
+        iptrunk_description = iptrunk_description or faker.sentence()
+        iptrunk_isis_metric = iptrunk_isis_metric or faker.pyint()
+        iptrunk_ipv4_network = iptrunk_ipv4_network or faker.ipv4_network()
+        iptrunk_ipv6_network = iptrunk_ipv6_network or faker.ipv6_network()
+        iptrunk_minimum_links = 1
+        iptrunk_side_a = iptrunk_side_subscription_factory()
+        iptrunk_side_b = iptrunk_side_subscription_factory()
+        iptrunk_sides = iptrunk_sides or [iptrunk_side_a, iptrunk_side_b]
+
+        iptrunk_subscription = IptrunkInactive.from_product_id(product_id, customer_id=CUSTOMER_ID, insync=True)
+        iptrunk_subscription.iptrunk.geant_s_sid = geant_s_sid
+        iptrunk_subscription.iptrunk.iptrunk_description = iptrunk_description
+        iptrunk_subscription.iptrunk.iptrunk_type = iptrunk_type
+        iptrunk_subscription.iptrunk.iptrunk_speed = iptrunk_speed
+        iptrunk_subscription.iptrunk.iptrunk_minimum_links = iptrunk_minimum_links
+        iptrunk_subscription.iptrunk.iptrunk_isis_metric = iptrunk_isis_metric
+        iptrunk_subscription.iptrunk.iptrunk_ipv4_network = iptrunk_ipv4_network
+        iptrunk_subscription.iptrunk.iptrunk_ipv6_network = iptrunk_ipv6_network
+        iptrunk_subscription.iptrunk.iptrunk_sides = iptrunk_sides
+
+        iptrunk_subscription = SubscriptionModel.from_other_lifecycle(
+            iptrunk_subscription, SubscriptionLifecycle.ACTIVE
+        )
+        iptrunk_subscription.description = description
+        iptrunk_subscription.start_date = start_date
+        iptrunk_subscription.save()
+        db.session.commit()
+
+        return str(iptrunk_subscription.subscription_id)
+
+    return subscription_create
diff --git a/test/imports/conftest.py b/test/imports/conftest.py
index 425a0e627a4592241e2c3f81cce910255dd34a5e..4a3e9c07a0c70ef31069d0f624c7437553562a16 100644
--- a/test/imports/conftest.py
+++ b/test/imports/conftest.py
@@ -1 +1,6 @@
-from test.fixtures import router_subscription_factory, site_subscription_factory  # noqa
+from test.fixtures import (  # noqa
+    iptrunk_side_subscription_factory,
+    iptrunk_subscription_factory,
+    router_subscription_factory,
+    site_subscription_factory,
+)
diff --git a/test/workflows/conftest.py b/test/workflows/conftest.py
index 6e6630890466c6a1f3d1d63000eefff387927472..a4b71a738da3818674500075dd7ce910e2c17382 100644
--- a/test/workflows/conftest.py
+++ b/test/workflows/conftest.py
@@ -1,7 +1,12 @@
 import pytest
 from urllib3_mock import Responses
 
-from test.fixtures import router_subscription_factory, site_subscription_factory  # noqa
+from test.fixtures import (  # noqa
+    iptrunk_side_subscription_factory,
+    iptrunk_subscription_factory,
+    router_subscription_factory,
+    site_subscription_factory,
+)
 
 
 @pytest.fixture(autouse=True)
diff --git a/test/workflows/iptrunk/test_modify_isis_metric.py b/test/workflows/iptrunk/test_modify_isis_metric.py
new file mode 100644
index 0000000000000000000000000000000000000000..521d6d2739f821b1d923aea06966736cb4722a4e
--- /dev/null
+++ b/test/workflows/iptrunk/test_modify_isis_metric.py
@@ -0,0 +1,58 @@
+from unittest.mock import patch
+
+import pytest
+
+from gso.products import Iptrunk
+from test.workflows import (
+    assert_complete,
+    assert_suspended,
+    extract_state,
+    resume_workflow,
+    run_workflow,
+    user_accept_and_assert_suspended,
+)
+
+
+@pytest.mark.workflow
+@patch("gso.workflows.iptrunk.modify_isis_metric.provisioning_proxy.provision_ip_trunk")
+def test_iptrunk_modify_isis_metric_success(
+    mock_provision_ip_trunk,
+    iptrunk_subscription_factory,
+    faker,
+):
+    #  Set up mock return values
+    product_id = iptrunk_subscription_factory()
+    new_isis_metric = faker.pyint()
+
+    #  Run workflow
+    initial_iptrunk_data = [
+        {"subscription_id": product_id},
+        {"tt_number": faker.tt_number(), "isis_metric": new_isis_metric},
+    ]
+    result, process_stat, step_log = run_workflow("modify_isis_metric", initial_iptrunk_data)
+    assert_suspended(result)
+
+    lso_return = {
+        "pp_run_results": {
+            "status": "ok",
+            "job_id": faker.uuid4(),
+            "output": "parsed_output",
+            "return_code": 0,
+        },
+        "confirm": "ACCEPTED",
+    }
+
+    result, step_log = user_accept_and_assert_suspended(process_stat, step_log, lso_return)
+    result, step_log = user_accept_and_assert_suspended(process_stat, step_log, [{}, {}])
+    result, step_log = user_accept_and_assert_suspended(process_stat, step_log, lso_return)
+    result, step_log = resume_workflow(process_stat, step_log, [{}, {}])
+
+    assert_complete(result)
+
+    state = extract_state(result)
+    subscription_id = state["subscription_id"]
+    subscription = Iptrunk.from_subscription(subscription_id)
+
+    assert "active" == subscription.status
+    assert mock_provision_ip_trunk.call_count == 2
+    assert subscription.iptrunk.iptrunk_isis_metric == new_isis_metric
diff --git a/tox.ini b/tox.ini
index 09bbbd4b7dc3d796a57232be610f66876eb46c99..a33adf5b1613231dd2fd5539f870f190b61c3a59 100644
--- a/tox.ini
+++ b/tox.ini
@@ -7,6 +7,9 @@ select = B,C,D,E,F,G,I,N,S,T,W,B902,B903,R
 max-line-length = 120
 ban-relative-imports = true
 
+[pytest]
+markers = workflow
+
 [testenv]
 passenv = DATABASE_URI_TEST,SKIP_ALL_TESTS
 deps =