1 package com.atlassian.webdriver.rule;
2
3 import com.atlassian.webdriver.testing.rule.LogPageSourceRule;
4 import org.junit.After;
5 import org.junit.Test;
6 import org.junit.runner.Description;
7 import org.junit.runner.RunWith;
8 import org.mockito.Mock;
9 import org.mockito.runners.MockitoJUnitRunner;
10 import org.openqa.selenium.WebDriver;
11 import org.slf4j.Logger;
12
13 import static org.mockito.Mockito.verify;
14 import static org.mockito.Mockito.verifyNoMoreInteractions;
15 import static org.mockito.Mockito.verifyZeroInteractions;
16 import static org.mockito.Mockito.when;
17
18
19
20
21
22
23 @RunWith(MockitoJUnitRunner.class)
24 public class TestLogPageSourceRule
25 {
26 private static final String LOG_PAGE_SOURCE = "atlassian.test.logSourceOnFailure";
27
28 @Mock private WebDriver mockWebDriver;
29
30 @Mock private Logger mockLogger;
31
32 @After
33 public void resetLogPageSourceProperty()
34 {
35 System.setProperty(LOG_PAGE_SOURCE, "");
36 }
37
38 @Test
39 public void shouldLogSourceOnFailureWhenEnabled()
40 {
41 enableLogPageSource();
42 when(mockWebDriver.getPageSource()).thenReturn("The Source");
43 final LogPageSourceRule rule = createRule();
44 rule.failed(new RuntimeException(), Description.createTestDescription(TestLogPageSourceRule.class, "testMethod"));
45 verify(mockLogger).info("----- Test '{}' Failed. ", "testMethod");
46 verify(mockLogger).info("----- START PAGE SOURCE DUMP\n\n\n{}\n\n\n", "The Source");
47 verify(mockLogger).info("----- END PAGE SOURCE DUMP");
48 verifyNoMoreInteractions(mockLogger);
49 }
50
51 @Test
52 public void shouldNotLogIfLoggingDisabled()
53 {
54 resetLogPageSourceProperty();
55 createRule().failed(new RuntimeException(), Description.createTestDescription(TestLogPageSourceRule.class, "testMethod"));
56 verifyZeroInteractions(mockLogger);
57 }
58
59 private void enableLogPageSource()
60 {
61 System.setProperty(LOG_PAGE_SOURCE, "true");
62 }
63
64 private LogPageSourceRule createRule()
65 {
66 return new LogPageSourceRule(mockWebDriver, mockLogger);
67 }
68 }