@Override
  public int hashCode() {
    return Objects.hash(changedIssues, change, issueStatusAfterUpdate);
  }
@Test
  public void hashcode_is_based_on_issues_change_and_resolution() {
    Rule rule = newRandomNotAHotspotRule("rule_name");
    Project project = new Project.Builder("prj_uuid").setKey("prj_key").setProjectName("prj_name").build();
    Set<ChangedIssue> changedIssues = IntStream.range(0, 2 + new Random().nextInt(5))
      .mapToObj(i -> new ChangedIssue.Builder("key_" + i)
        .setNewStatus("status")
        .setRule(rule)
        .setProject(project)
        .build())
      .collect(Collectors.toSet());
    AnalysisChange change = new AnalysisChange(12);
    User user = new User("uuid", "login", null);
    FPOrAcceptedNotification underTest = new FPOrAcceptedNotification(change, changedIssues, ACCEPTED);

    assertThat(underTest.hashCode())
      .isEqualTo(new FPOrAcceptedNotification(change, changedIssues, ACCEPTED).hashCode())
      .isEqualTo(new FPOrAcceptedNotification(change, ImmutableSet.copyOf(changedIssues), ACCEPTED).hashCode())
      .isNotEqualTo(new Object().hashCode())
      .isNotEqualTo(new FPOrAcceptedNotification(change, Collections.emptySet(), ACCEPTED).hashCode())
      .isNotEqualTo(new FPOrAcceptedNotification(change, ImmutableSet.of(changedIssues.iterator().next()), ACCEPTED).hashCode())
      .isNotEqualTo(new FPOrAcceptedNotification(new AnalysisChange(14), changedIssues, ACCEPTED).hashCode())
      .isNotEqualTo(new FPOrAcceptedNotification(new IssuesChangesNotificationBuilder.UserChange(12, user), changedIssues, ACCEPTED).hashCode())
      .isNotEqualTo(new FPOrAcceptedNotification(change, changedIssues, FP)).hashCode();
  }