Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
AnnotationExtractorTest.php
Go to the documentation of this file.
1 <?php
7 
8 use AspectMock\Proxy\Verifier;
9 use AspectMock\Test as AspectMock;
11 use Monolog\Handler\TestHandler;
12 use Monolog\Logger;
13 use PHPUnit\Framework\TestCase;
15 
16 class AnnotationExtractorTest extends TestCase
17 {
22  public function setUp()
23  {
24  TestLoggingUtil::getInstance()->setMockLoggingUtil();
25  }
26 
32  public function testExtractAnnotations()
33  {
34  // Test Data
35  $testAnnotations = [
36  "nodeName" => "annotations",
37  "features" => [
38  [
39  "nodeName" => "features",
40  "value" => "TestFeatures"
41  ]
42  ],
43  "stories" => [
44  [
45  "nodeName" => "stories",
46  "value" => "TestStories"
47  ]
48  ],
49  "description" => [
50  [
51  "nodeName" => "description",
52  "value" => "TestDescription"
53  ]
54  ],
55  "severity" => [
56  [
57  "nodeName" => "severity",
58  "value" => "CRITICAL"
59  ]
60  ],
61  "group" => [
62  [
63  "nodeName" => "group",
64  "value" => "TestGroup"
65  ]
66  ],
67  ];
68  // Perform Test
69  $extractor = new AnnotationExtractor();
70  $returnedAnnotations = $extractor->extractAnnotations($testAnnotations, "testFileName");
71 
72  // Asserts
73 
74  $this->assertEquals("TestFeatures", $returnedAnnotations['features'][0]);
75  $this->assertEquals("TestStories", $returnedAnnotations['stories'][0]);
76  $this->assertEquals("TestDescription", $returnedAnnotations['description'][0]);
77  $this->assertEquals("CRITICAL", $returnedAnnotations['severity'][0]);
78  $this->assertEquals("TestGroup", $returnedAnnotations['group'][0]);
79  }
80 
86  public function testMissingAnnotations()
87  {
88  // Test Data, missing title, description, and severity
89  $testAnnotations = [
90  "nodeName" => "annotations",
91  "features" => [
92  [
93  "nodeName" => "features",
94  "value" => "TestFeatures"
95  ]
96  ],
97  "stories" => [
98  [
99  "nodeName" => "stories",
100  "value" => "TestStories"
101  ]
102  ],
103  "group" => [
104  [
105  "nodeName" => "group",
106  "value" => "TestGroup"
107  ]
108  ],
109  ];
110  // Perform Test
111  $extractor = new AnnotationExtractor();
112  $returnedAnnotations = $extractor->extractAnnotations($testAnnotations, "testFileName");
113 
114  // Asserts
115  TestLoggingUtil::getInstance()->validateMockLogStatement(
116  'warning',
117  'DEPRECATION: Test testFileName is missing required annotations.',
118  [
119  'testName' => 'testFileName',
120  'missingAnnotations' => "title, description, severity"
121  ]
122  );
123  }
124 
125  public function testTestCaseIdUniqueness()
126  {
127  // Test Data
128  $firstTestAnnotation = [
129  "nodeName" => "annotations",
130  "features" => [
131  [
132  "nodeName" => "features",
133  "value" => "TestFeatures"
134  ]
135  ],
136  "stories" => [
137  [
138  "nodeName" => "stories",
139  "value" => "TestStories"
140  ]
141  ],
142  "title" => [
143  [
144  "nodeName" => "title",
145  "value" => "TEST TITLE"
146  ]
147  ],
148  "severity" => [
149  [
150  "nodeName" => "severity",
151  "value" => "CRITICAL"
152  ]
153  ],
154  "testCaseId" => [
155  [
156  "nodeName" => "testCaseId",
157  "value" => "MQE-0001"
158  ]
159  ],
160  ];
161  $secondTestannotation = [
162  "nodeName" => "annotations",
163  "features" => [
164  [
165  "nodeName" => "features",
166  "value" => "TestFeatures"
167  ]
168  ],
169  "stories" => [
170  [
171  "nodeName" => "stories",
172  "value" => "TestStories"
173  ]
174  ],
175  "title" => [
176  [
177  "nodeName" => "title",
178  "value" => "TEST TITLE"
179  ]
180  ],
181  "severity" => [
182  [
183  "nodeName" => "severity",
184  "value" => "CRITICAL"
185  ]
186  ],
187  "testCaseId" => [
188  [
189  "nodeName" => "testCaseId",
190  "value" => "MQE-0001"
191  ]
192  ],
193  ];
194  // Perform Test
195  $extractor = new AnnotationExtractor();
196  $extractor->extractAnnotations($firstTestAnnotation, "firstTest");
197  $extractor->extractAnnotations($secondTestannotation, "secondTest");
198 
199  //Expect Exception
200  $this->expectException(\Magento\FunctionalTestingFramework\Exceptions\XmlException::class);
201  $this->expectExceptionMessage("TestCaseId and Title pairs must be unique:\n\n" .
202  "TestCaseId: 'MQE-0001' Title: 'TEST TITLE' in Tests 'firstTest', 'secondTest'");
203 
204  //Trigger Exception
205  $extractor->validateTestCaseIdTitleUniqueness();
206  }
207 
212  public static function tearDownAfterClass()
213  {
214  TestLoggingUtil::getInstance()->clearMockLoggingUtil();
215  }
216 }