diff --git a/manila_tempest_tests/config.py b/manila_tempest_tests/config.py
index 1cd553e..aebe125 100644
--- a/manila_tempest_tests/config.py
+++ b/manila_tempest_tests/config.py
@@ -30,7 +30,7 @@
                help="The minimum api microversion is configured to be the "
                     "value of the minimum microversion supported by Manila."),
     cfg.StrOpt("max_api_microversion",
-               default="2.25",
+               default="2.26",
                help="The maximum api microversion is configured to be the "
                     "value of the latest microversion supported by Manila."),
     cfg.StrOpt("region",
diff --git a/manila_tempest_tests/tests/api/base.py b/manila_tempest_tests/tests/api/base.py
index 1ecb728..4459f59 100644
--- a/manila_tempest_tests/tests/api/base.py
+++ b/manila_tempest_tests/tests/api/base.py
@@ -221,6 +221,12 @@
         return client
 
     @classmethod
+    def skip_checks(cls):
+        super(BaseSharesTest, cls).skip_checks()
+        if not CONF.service_available.manila:
+            raise cls.skipException("Manila support is required")
+
+    @classmethod
     def verify_nonempty(cls, *args):
         if not all(args):
             msg = "Missing API credentials in configuration."
diff --git a/manila_tempest_tests/tests/api/test_quotas.py b/manila_tempest_tests/tests/api/test_quotas.py
index a7540ed..83c776f 100644
--- a/manila_tempest_tests/tests/api/test_quotas.py
+++ b/manila_tempest_tests/tests/api/test_quotas.py
@@ -14,6 +14,7 @@
 #    under the License.
 
 import ddt
+import itertools
 from tempest import config
 from testtools import testcase as tc
 
@@ -65,27 +66,23 @@
         self.assertGreater(int(quotas["snapshots"]), -2)
         self.assertGreater(int(quotas["share_networks"]), -2)
 
+    @ddt.data(
+        *itertools.product(set(("2.25", CONF.share.max_api_microversion)),
+                           (True, False))
+    )
+    @ddt.unpack
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
     @base.skip_if_microversion_not_supported("2.25")
-    def test_show_quotas_detail(self):
-        quotas = self.shares_v2_client.detail_quotas(self.tenant_id)
+    def test_show_quotas_detail(self, microversion, with_user):
+        quota_args = {"tenant_id": self.tenant_id, "version": microversion, }
+        if with_user:
+            quota_args.update({"user_id": self.user_id})
+        quotas = self.shares_v2_client.detail_quotas(**quota_args)
         quota_keys = list(quotas.keys())
         for outer in ('gigabytes', 'snapshot_gigabytes', 'shares',
                       'snapshots', 'share_networks'):
             self.assertIn(outer, quota_keys)
+            outer_keys = list(quotas[outer].keys())
             for inner in ('in_use', 'limit', 'reserved'):
-                self.assertIn(inner, list(quotas[outer].keys()))
-                self.assertGreater(int(quotas[outer][inner]), -2)
-
-    @tc.attr(base.TAG_POSITIVE, base.TAG_API)
-    @base.skip_if_microversion_not_supported("2.25")
-    def test_show_quotas_detail_for_user(self):
-        quotas = self.shares_v2_client.detail_quotas(self.tenant_id,
-                                                     self.user_id)
-        quota_keys = list(quotas.keys())
-        for outer in ('gigabytes', 'snapshot_gigabytes', 'shares',
-                      'snapshots', 'share_networks'):
-            self.assertIn(outer, quota_keys)
-            for inner in ('in_use', 'limit', 'reserved'):
-                self.assertIn(inner, list(quotas[outer].keys()))
+                self.assertIn(inner, outer_keys)
                 self.assertGreater(int(quotas[outer][inner]), -2)
diff --git a/manila_tempest_tests/tests/api/test_quotas_negative.py b/manila_tempest_tests/tests/api/test_quotas_negative.py
index ca9882e..2e850fb 100644
--- a/manila_tempest_tests/tests/api/test_quotas_negative.py
+++ b/manila_tempest_tests/tests/api/test_quotas_negative.py
@@ -13,6 +13,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+import ddt
 from tempest import config
 from tempest.lib import exceptions as lib_exc
 from testtools import testcase as tc
@@ -22,6 +23,7 @@
 CONF = config.CONF
 
 
+@ddt.ddt
 class SharesQuotasNegativeTest(base.BaseSharesTest):
 
     @classmethod
@@ -48,3 +50,11 @@
                           self.shares_v2_client.update_quotas,
                           self.shares_v2_client.tenant_id,
                           shares=9)
+
+    @ddt.data("2.6", "2.7", "2.24")
+    @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
+    def test_get_quotas_detail_with_wrong_version(self, microversion):
+        self.assertRaises(lib_exc.NotFound,
+                          self.shares_v2_client.detail_quotas,
+                          self.shares_v2_client.tenant_id,
+                          version=microversion)
diff --git a/manila_tempest_tests/tests/api/test_share_networks_negative.py b/manila_tempest_tests/tests/api/test_share_networks_negative.py
index 4c40857..0ec9407 100644
--- a/manila_tempest_tests/tests/api/test_share_networks_negative.py
+++ b/manila_tempest_tests/tests/api/test_share_networks_negative.py
@@ -118,7 +118,6 @@
         new_sn = self.create_share_network(
             neutron_net_id=share_network['neutron_net_id'],
             neutron_subnet_id=share_network['neutron_subnet_id'],
-            nova_net_id=share_network['nova_net_id'],
             cleanup_in_class=False)
 
         # Create share with share network
diff --git a/manila_tempest_tests/tests/scenario/manager_share.py b/manila_tempest_tests/tests/scenario/manager_share.py
index 01be412..e019733 100644
--- a/manila_tempest_tests/tests/scenario/manager_share.py
+++ b/manila_tempest_tests/tests/scenario/manager_share.py
@@ -50,6 +50,12 @@
         cls.shares_admin_v2_client = shares_v2_client.SharesV2Client(
             cls.os_admin.auth_provider)
 
+    @classmethod
+    def skip_checks(cls):
+        super(ShareScenarioTest, cls).skip_checks()
+        if not CONF.service_available.manila:
+            raise cls.skipException("Manila support is required")
+
     def _create_share(self, share_protocol=None, size=None, name=None,
                       snapshot_id=None, description=None, metadata=None,
                       share_network_id=None, share_type_id=None,
