diff --git a/src/blenderbim/blenderbim/bim/module/context/operator.py b/src/blenderbim/blenderbim/bim/module/context/operator.py
index a3ffa13a1e..72d8afbbea 100644
--- a/src/blenderbim/blenderbim/bim/module/context/operator.py
+++ b/src/blenderbim/blenderbim/bim/module/context/operator.py
@@ -17,9 +17,8 @@
# along with BlenderBIM Add-on. If not, see .
import bpy
-import ifcopenshell.api
-import blenderbim.bim.tool
-import blenderbim.core.context
+import blenderbim.tool as tool
+import blenderbim.core.context as core
from blenderbim.bim.ifc import IfcStore
from ifcopenshell.api.context.data import Data
@@ -36,12 +35,12 @@ class AddSubcontext(bpy.types.Operator):
return IfcStore.execute_ifc_operator(self, context)
def _execute(self, context):
- blenderbim.core.context.AddContext(
- blenderbim.bim.tool.Ifc,
+ core.add_context(
+ tool.Ifc(),
context=self.context or context.scene.BIMProperties.available_contexts,
subcontext=self.subcontext or context.scene.BIMProperties.available_subcontexts,
target_view=self.target_view or context.scene.BIMProperties.available_target_views,
- ).execute()
+ )
Data.load(IfcStore.get_file())
return {"FINISHED"}
@@ -57,8 +56,6 @@ class RemoveSubcontext(bpy.types.Operator):
def _execute(self, context):
self.file = IfcStore.get_file()
- blenderbim.core.context.RemoveContext(
- blenderbim.bim.tool.Ifc, context=self.file.by_id(self.ifc_definition_id)
- ).execute()
+ core.remove_context(tool.Ifc(), context=self.file.by_id(self.ifc_definition_id))
Data.load(self.file)
return {"FINISHED"}
diff --git a/src/blenderbim/blenderbim/core/context.py b/src/blenderbim/blenderbim/core/context.py
index 6f258c3356..acd354fb42 100644
--- a/src/blenderbim/blenderbim/core/context.py
+++ b/src/blenderbim/blenderbim/core/context.py
@@ -17,26 +17,9 @@
# along with BlenderBIM Add-on. If not, see .
-class AddContext:
- def __init__(self, ifc, context=None, subcontext=None, target_view=None):
- self.ifc = ifc
- self.context = context
- self.subcontext = subcontext
- self.target_view = target_view
-
- def execute(self):
- return self.ifc.run(
- "context.add_context",
- context=self.context,
- subcontext=self.subcontext,
- target_view=self.target_view,
- )
+def add_context(ifc, context=None, subcontext=None, target_view=None):
+ return ifc.run("context.add_context", context=context, subcontext=subcontext, target_view=target_view)
-class RemoveContext:
- def __init__(self, ifc, context=None):
- self.ifc = ifc
- self.context = context
-
- def execute(self):
- self.ifc.run("context.remove_context", context=self.context)
+def remove_context(ifc, context=None):
+ ifc.run("context.remove_context", context=context)
diff --git a/src/blenderbim/pytest.ini b/src/blenderbim/pytest.ini
new file mode 100644
index 0000000000..4f33eaa399
--- /dev/null
+++ b/src/blenderbim/pytest.ini
@@ -0,0 +1,4 @@
+[pytest]
+markers =
+ context
+ owner
diff --git a/src/blenderbim/test/bim/feature/context.feature b/src/blenderbim/test/bim/feature/context.feature
new file mode 100644
index 0000000000..c76fe80891
--- /dev/null
+++ b/src/blenderbim/test/bim/feature/context.feature
@@ -0,0 +1,14 @@
+@context
+Feature: Context
+ Manages geometric representation contexts and subcontexts
+
+Scenario: Add subcontext
+ Given an empty IFC project
+ When I press "bim.add_subcontext(context='Model')"
+ Then nothing happens
+
+Scenario: Remove subcontext
+ Given an empty IFC project
+ When the variable "context_id" is "IfcStore.get_file().by_type('IfcGeometricRepresentationContext')[0].id()"
+ And I press "bim.remove_subcontext(ifc_definition_id={context_id})"
+ Then nothing happens
diff --git a/src/blenderbim/test/bim/feature/owner.feature b/src/blenderbim/test/bim/feature/owner.feature
index 7313dcf346..d64d8ab59e 100644
--- a/src/blenderbim/test/bim/feature/owner.feature
+++ b/src/blenderbim/test/bim/feature/owner.feature
@@ -1,3 +1,4 @@
+@owner
Feature: Owner
Covers ownership history, people, organisations, roles, and addresses.
diff --git a/src/blenderbim/test/bim/module/context/test_operator.py b/src/blenderbim/test/bim/module/context/test_operator.py
deleted file mode 100644
index ab2c97f4cd..0000000000
--- a/src/blenderbim/test/bim/module/context/test_operator.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# BlenderBIM Add-on - OpenBIM Blender Add-on
-# Copyright (C) 2021 Dion Moult
-#
-# This file is part of BlenderBIM Add-on.
-#
-# BlenderBIM Add-on is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# BlenderBIM Add-on is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with BlenderBIM Add-on. If not, see .
-
-import test.bim.bootstrap
-
-
-class TestAddSubcontext(test.bim.bootstrap.NewFile):
- @test.bim.bootstrap.scenario
- def test_adding_a_subcontext(self):
- return """
- Given an empty IFC project
- When I press "bim.add_subcontext(context='Model')"
- Then nothing interesting happens
- """
-
-
-class TestRemoveSubcontext(test.bim.bootstrap.NewFile):
- @test.bim.bootstrap.scenario
- def test_removing_a_subcontext(self):
- return """
- Given an empty IFC project
- And the variable "context_id" is "IfcStore.get_file().by_type('IfcGeometricRepresentationContext')[0].id()"
- When I press "bim.remove_subcontext(ifc_definition_id={context_id})"
- Then nothing interesting happens
- """
diff --git a/src/blenderbim/test/core/test_context.py b/src/blenderbim/test/core/test_context.py
index dc7d645032..d35470dc59 100644
--- a/src/blenderbim/test/core/test_context.py
+++ b/src/blenderbim/test/core/test_context.py
@@ -16,23 +16,19 @@
# You should have received a copy of the GNU General Public License
# along with BlenderBIM Add-on. If not, see .
-import blenderbim.core.context
-from test.core.bootstrap import Spec, subject, ifc, blender
+import blenderbim.core.context as subject
+from test.core.bootstrap import ifc
-@subject(blenderbim.core.context.AddContext)
-class TestAddContext(Spec):
+class TestAddContext:
def test_adding_a_context(self, ifc):
- self.construct_with(ifc, context="Model", subcontext="Body", target_view="MODEL_VIEW")
ifc.run(
"context.add_context", context="Model", subcontext="Body", target_view="MODEL_VIEW"
- ).should().be_called().return_with("context")
- assert self.subject.execute() == "context"
+ ).should_be_called().will_return("context")
+ assert subject.add_context(ifc, context="Model", subcontext="Body", target_view="MODEL_VIEW") == "context"
-@subject(blenderbim.core.context.RemoveContext)
-class TestRemoveContext(Spec):
+class TestRemoveContext:
def test_removing_a_context(self, ifc):
- self.construct_with(ifc, context="context")
- ifc.run("context.remove_context", context="context").should().be_called()
- self.subject.execute()
+ ifc.run("context.remove_context", context="context").should_be_called()
+ subject.remove_context(ifc, context="context")