def test_uses_given_time_if_specified(self): event = 12 expected = self.fake_now + timedelta(minutes=42) subscriber = Subscriber(event=event) EventBroker.publish(event=event, event_time=expected) expect(subscriber.kwargs_received).to( contain_key_with_value("event_time", expected))
def test_does_not_quit_when_debugging_and_test_failed(self): self.set_debug_flag() sut = Browser() sut EventBroker.publish(event=TestEvent.test_failed) EventBroker.publish(event=TestEvent.suite_ended) assert not self.quit_was_called(), "quit() was called"
def test_subscribes_to_last(self): all_events = list(TestEvent) events = (all_events[1], all_events[3], all_events[5]) spy = FunctionSpy() EventBroker.subscribe(events=events, func=spy) EventBroker.publish(event=events[-1]) spy.assert_was_called()
def test_suite_erred_message(self): err = RuntimeError("something broke") EventBroker.publish(event=TestEvent.suite_erred, suite_name="spam", exception=err) level, msg = self.logged() expect(msg).to(equal(format_exception(err)))
def test_sample_measured_level(self): EventBroker.publish(event=TestEvent.sample_measured, test_name="spam", sample_parameters="spam", sample_execution_seconds=0) level, msg = self.logged() expect(level).to(equal("info"))
def test_does_not_subscribe_to_unspecified(self): all_events = list(TestEvent) events = (all_events[1], all_events[3], all_events[5]) spy = FunctionSpy() EventBroker.subscribe(events=events, func=spy) EventBroker.publish(event=all_events[2]) expect(spy.call_history).to(be_empty)
def test_test_skipped_message(self): err = TestSkipped("Let's not go there") test_name = "A rather silly place" EventBroker.publish(event=TestEvent.test_skipped, exception=err, test_name=test_name) level, msg = self.logged() expect(msg).to(equal('Check "%s" skipped: %s' % (test_name, err)))
def test_test_skipped_level(self): err = TestSkipped("Let's not go there") test_name = "A rather silly place" EventBroker.publish(event=TestEvent.test_skipped, exception=err, test_name=test_name) level, msg = self.logged() expect(level).to(equal("warning"))
def publish_results(self): self.results = SuiteResults() self.results.suite_name = self.suite_name self.results.tests = [ TestResult(test_name="Test %d" % n) for n in range(4) ] EventBroker.publish(event=TestEvent.suite_results_compiled, suite_results=self.results)
def test_creates_suite_exception_if_none_specified(self): suite_name = "Squirelly Suite" start_suite(suite_name) EventBroker.publish(event=TestEvent.suite_erred, suite_name=suite_name, exception=RuntimeError()) end_suite() expect(self.retrieve_results().suite_exception).to(be_a(Exception))
def test_publishes_event_type(self): all_events = list(TestEvent) events = (all_events[1], all_events[3], all_events[5]) published = events[1] spy = FunctionSpy() EventBroker.subscribe(events=events, func=spy) EventBroker.publish(event=published) expect(spy["event"]).to(equal(published))
def test_attaches_artifact_to_suite_when_no_test_named(self): artifact = b"fffffffffffffff" start_suite() EventBroker.publish(event=TestEvent.artifact_created, artifact=artifact) end_suite() results = self.retrieve_results() expect(results.artifacts).to(contain(artifact))
def test_test_failed_message(self): err = AssertionError("oops") test_name = "Test tea" EventBroker.publish(event=TestEvent.test_failed, exception=err, test_name=test_name) level, msg = self.logged() expect(msg).to(equal('Check "%s" failed: %s' % (test_name, err)))
def test_unbound_subscriber_gets_garbage_collected(self): def subscriber(): Evidence.subscriber_ran = True EventBroker.subscribe(event=EVENT, func=subscriber) subscriber = None gc.collect() EventBroker.publish(event=EVENT) assert not Evidence.subscriber_ran, "Subscriber ran after it should have been garbage collected"
def test_request_method_and_url(self): method = "HEAD" sut = HttpClient() url = "http://i.love2spam.net/spam" getattr(sut, method.lower())(url) EventBroker.publish(event=TestEvent.test_failed, exception=RuntimeError()) expect(self.published["artifact"]).to( contain("\n%s %s" % (method, url)))
def test_closes_tunnel_on_suite_end(self): self.context.set_env(browser_locaton="BrowserStack", BROWSERSTACK_SET_LOCAL="true") spy = MasterSpy(TunnelToNowhere()) self.context.inject_as_class(BrowserStackTunnel, spy) sut = Browser() # noqa: F841 assert not spy.was_closed, "close was called prematurely." EventBroker.publish(event=TestEvent.suite_ended) assert spy.was_closed, "close was not called."
def test_publish_with_test_name_on_test_failed(self): sut = HttpClient() sut.get("http://spamoni.io") name = "nombre" EventBroker.publish(event=TestEvent.test_failed, test_name=name, exception=RuntimeError()) assert self.published, "Nothing was published" expect(self.published).to(contain_key_with_value("test_name", name))
def test_publish_with_suite_name_on_suite_erred(self): sut = HttpClient() sut.get("http://spamoni.io") name = "bubba" EventBroker.publish(event=TestEvent.suite_erred, suite_name=name, exception=RuntimeError()) assert self.published, "Nothing was published" expect(self.published).to(contain_key_with_value("suite_name", name))
def test_attaches_exception_to_errant_suite(self): suite_name = "SPAMmy Suite" exception = RuntimeError("I don't like SPAM!") start_suite(suite_name) EventBroker.publish(event=TestEvent.suite_erred, suite_name=suite_name, exception=exception) end_suite() expect(self.retrieve_results().suite_exception).to(equal(exception))
def test_request_headers(self): headers = {"X-yz": "yogurt humphrey", "Content-length": "infinite"} sut = HttpClient() sut.get("http://something", headers=headers) EventBroker.publish(event=TestEvent.test_failed, exception=RuntimeError()) expect(self.published["artifact"]).to( contain("\n".join(["%s: %s" % (k, v) for k, v in headers.items()])))
def on_suite_erred(self, suite_name=None, test_name=None, **kwargs): EventBroker.publish( event=TestEvent.artifact_created, artifact=str(self._transcript), artifact_mime_type="text/plain", artifact_type="http_transcript", suite_name=suite_name, test_name=test_name, )
def test_saves_artifact_with_suite_and_test_to_test_dir_under_suite(self): suite_name = "Libations" test_name = "test_tea" EventBroker.publish(event=TestEvent.suite_started, suite_name=suite_name) publish(test_name=test_name) actual_path, _ = os.path.split(self.fake_file.filename) expect(actual_path).to( equal(os.path.join(self.artifacts_path, suite_name, test_name)))
def test_saves_artifact_with_suite_and_test_to_test_dir_under_suite(self): suite_name = "Libations" test_name = "test_tea" EventBroker.publish(event=TestEvent.suite_started, suite_name=suite_name) publish_artifact(test_name=test_name) run_id, kind, suite, test, filename = self.extract_key_parts() expect(suite).to(equal(suite_name)) expect(test).to(equal(test_name))
def test_sample_measured_message(self): name = "Turkey" params = "argle bargle" seconds = 105.3 EventBroker.publish(event=TestEvent.sample_measured, test_name=name, sample_parameters=params, sample_execution_seconds=seconds) level, msg = self.logged() expect(msg).to(equal(f"{name} completed in {seconds} seconds"))
def test_response_headers(self): headers = {"X-yz": "Sam the spammer", "Content-length": "2"} self.fake_requests.response.headers = headers sut = HttpClient() sut.get("http://something") EventBroker.publish(event=TestEvent.test_failed, exception=RuntimeError()) expect(self.published["artifact"]).to( contain("\n".join(["%s: %s" % (k, v) for k, v in headers.items()])))
def test_sends_self_to_dom_dump(self): arg = None def fake_dump(a): nonlocal arg arg = a self.context.inject(dump_dom, fake_dump) EventBroker.publish(event=TestEvent.suite_erred) expect(arg).to(be(self.sut))
def publish_dom_dump(self, artifact_group=None, suite_name=None, test_name=None, **kwargs): EventBroker.publish( artifact_group=artifact_group, event=TestEvent.artifact_created, artifact=dependency(dump_dom)(self), artifact_mime_type="text/html", artifact_type="dom_dump", suite_name=suite_name, test_name=test_name, )
def publish_screenshot(self, artifact_group=None, suite_name=None, test_name=None, **kwargs): EventBroker.publish( artifact_group=artifact_group, event=TestEvent.artifact_created, suite_name=suite_name, test_name=test_name, artifact=self._driver.get_screenshot_as_png(), artifact_type="screenshot", artifact_mime_type="image/png", )
def test_does_not_attempt_to_run_garbage_collected_subscriber(self): def subscriber(): pass EventBroker.subscribe(event=EVENT, func=subscriber) subscriber = None gc.collect() EventBroker.publish(event=EVENT) assert not self.errors_logged( ), 'Unexpected errors in the log: "%s"' % (self.errors_logged())
def test_creates_missing_test_on_artifact_with_test_name(self): test_name = "oops" start_suite() EventBroker.publish(event=TestEvent.artifact_created, test_name=test_name, artifact="this") end_suite() results = self.retrieve_results() expect(results.tests).to(have_length(1)) test = results.tests[0] expect(test.name).to(equal(test_name))