@Test
public void onChangeLogParsedCreatesAction() throws Exception {

    JiraSCMListener listener = new JiraSCMListener();
    Job job = mock(Job.class);
    Run run = mock(Run.class);
    ChangeLogSet logSet = mock(ChangeLogSet.class);
    final ChangeLogSet.Entry entry = mock(ChangeLogSet.Entry.class);
    when(entry.getParent()).thenReturn(logSet);
    when(logSet.getRun()).thenReturn(run);
    when(run.getParent()).thenReturn(job);
    when(entry.getMsg()).thenReturn("TEST-123");
    ChangeLogSet<ChangeLogSet.Entry> set = new ChangeLogSet<ChangeLogSet.Entry>(run, null) {
        @Override
        public boolean isEmptySet() {
            return false;
        }
        @Override
        public Iterator<Entry> iterator() {
            return Collections.singletonList(entry).iterator();
        }
    };
    // Setup JIRA site
    mockStatic(JiraSite.class);
    JiraSite site = mock(JiraSite.class);
    JiraSession session = mock(JiraSession.class);
    when(site.getIssuePattern()).thenReturn(JiraSite.DEFAULT_ISSUE_PATTERN);
    when(site.getSession()).thenReturn(session);
    when(JiraSite.get(job)).thenReturn(site);
    Issue rawIssue = mock(Issue.class);
    when(rawIssue.getKey()).thenReturn("TEST-123");
    when(rawIssue.getSummary()).thenReturn("Foo");
    when(session.getIssuesFromJqlSearch("key in ('TEST-123')")).thenReturn(Collections.singletonList(rawIssue));
    when(run.getAction(JiraBuildAction.class)).thenReturn(null);
    ArgumentCaptor<JiraBuildAction> actionArgumentCaptor = ArgumentCaptor.forClass(JiraBuildAction.class);
    listener.onChangeLogParsed(run, null,null, set);
    verify(run).addAction(actionArgumentCaptor.capture());
    JiraBuildAction action = actionArgumentCaptor.getValue();
    Assert.assertFalse(action.getIssues().isEmpty());
    JiraIssue issue = action.getIssue("TEST-123");
    Assert.assertNotNull(issue);
    Assert.assertEquals("TEST-123", issue.getKey());
}