Coverage for manyworlds/scenario.py: 94%
36 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-08-06 10:33 -0400
« prev ^ index » next coverage.py v7.2.7, created at 2023-08-06 10:33 -0400
1"""Defines the ScenarioForest Class"""
2import re
3from igraph import Graph
4import pdb
6from .step import Step, Prerequisite, Action, Assertion
8class Scenario:
9 """A BDD Scenario
11 :param name: The name of the scenario
12 :type name: string
13 :param vertex: The iGraph vertex associated with the scenario
14 :type name: class: igraph.Vertex
15 """
17 def __init__(self, name, vertex):
18 """Constructor method
19 """
20 self.name = name.strip()
21 self.vertex = vertex
22 self.graph = vertex.graph
23 self.steps = []
25 def prerequisites(self):
26 return self.steps_of_class(Prerequisite)
28 def actions(self):
29 return self.steps_of_class(Action)
31 def assertions(self):
32 return self.steps_of_class(Assertion)
34 def steps_of_class(self, step_class):
35 return [st for st in self.steps if type(st) is step_class]
37 def __str__(self):
38 return "<Scenario: {} ({} prerequisites, {} actions, {} assertions)>".format(self.name, len(self.prerequisites()), len(self.actions()), len(self.assertions()))
40 def __repr__(self):
41 return self.__str__()
43 def ancestors(self):
44 ancestors = self.graph.neighborhood(self.vertex, mode='IN', order=1000, mindist=1)
45 ancestors.reverse()
46 return [vx['scenario'] for vx in self.graph.vs(ancestors)]
48 def level(self):
49 return self.graph.neighborhood_size(self.vertex, mode="IN", order=1000)
51 def is_breadcrumb(self):
52 return len(self.assertions()) == 0
54 def format(self):
55 breadcrumbs = [sc.name for sc in self.ancestors() if sc.is_breadcrumb()]
56 breadcrumbs_string = ''
57 if breadcrumbs:
58 breadcrumbs_string = ' > '.join(breadcrumbs) + ' > '
59 return "Scenario: " + breadcrumbs_string + self.name