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")