@Test
  public void nothing_to_do_when_no_events_in_report() throws Exception {
    dbTester.prepareDbUnit(getClass(), "nothing_to_do_when_no_events_in_report.xml");

    File reportDir = temp.newFolder();
    BatchReportWriter writer = new BatchReportWriter(reportDir);
    writer.writeMetadata(
        BatchReport.Metadata.newBuilder()
            .setRootComponentRef(1)
            .setProjectKey("PROJECT_KEY")
            .setAnalysisDate(150000000L)
            .build());

    writer.writeComponent(
        BatchReport.Component.newBuilder()
            .setRef(1)
            .setType(Constants.ComponentType.PROJECT)
            .setUuid("ABCD")
            .build());

    step.execute(
        new ComputationContext(new BatchReportReader(reportDir), mock(ComponentDto.class)));

    dbTester.assertDbUnit(getClass(), "nothing_to_do_when_no_events_in_report.xml", "events");
  }
  @Test
  public void keep_one_event_by_version() throws Exception {
    dbTester.prepareDbUnit(getClass(), "keep_one_event_by_version.xml");

    File reportDir = temp.newFolder();
    BatchReportWriter writer = new BatchReportWriter(reportDir);
    writer.writeMetadata(
        BatchReport.Metadata.newBuilder()
            .setRootComponentRef(1)
            .setProjectKey("PROJECT_KEY")
            .setAnalysisDate(150000000L)
            .build());

    writer.writeComponent(
        BatchReport.Component.newBuilder()
            .setRef(1)
            .setType(Constants.ComponentType.PROJECT)
            .setUuid("ABCD")
            .setSnapshotId(1001L)
            .setVersion("1.5-SNAPSHOT")
            .build());

    step.execute(
        new ComputationContext(new BatchReportReader(reportDir), mock(ComponentDto.class)));

    dbTester.assertDbUnit(getClass(), "keep_one_event_by_version-result.xml", "events");
  }
  private BatchReportWriter initReport() {
    BatchReportWriter writer = new BatchReportWriter(reportDir);
    writer.writeMetadata(
        BatchReport.Metadata.newBuilder()
            .setRootComponentRef(1)
            .setProjectKey("PROJECT_KEY")
            .setAnalysisDate(150000000L)
            .build());

    writer.writeComponent(
        BatchReport.Component.newBuilder()
            .setRef(1)
            .setType(Constants.ComponentType.PROJECT)
            .setUuid("PROJECT_A")
            .addChildRef(2)
            .build());
    writer.writeComponent(
        BatchReport.Component.newBuilder()
            .setRef(2)
            .setType(Constants.ComponentType.MODULE)
            .setUuid("BCDE")
            .addChildRef(FILE_REF)
            .build());
    writer.writeComponent(
        BatchReport.Component.newBuilder()
            .setRef(FILE_REF)
            .setType(Constants.ComponentType.FILE)
            .setUuid("FILE_A")
            .build());
    return writer;
  }
  @Test
  public void readMetadata_result_is_cached() {
    BatchReport.Metadata metadata = BatchReport.Metadata.newBuilder().build();

    writer.writeMetadata(metadata);

    BatchReport.Metadata res = underTest.readMetadata();
    assertThat(res).isEqualTo(metadata);
    assertThat(underTest.readMetadata()).isSameAs(res);
  }
 @Override
 public void execute() {
   BatchReport.Metadata reportMetadata = reportReader.readMetadata();
   mutableAnalysisMetadataHolder.setRootComponentRef(reportMetadata.getRootComponentRef());
   mutableAnalysisMetadataHolder.setBranch(
       reportMetadata.hasBranch() ? reportMetadata.getBranch() : null);
   mutableAnalysisMetadataHolder.setAnalysisDate(reportMetadata.getAnalysisDate());
   mutableAnalysisMetadataHolder.setCrossProjectDuplicationEnabled(
       reportMetadata.hasCrossProjectDuplicationActivated()
           && reportMetadata.getCrossProjectDuplicationActivated());
 }
  @Test
  public void persist_report_events_with_component_children() throws Exception {
    dbTester.prepareDbUnit(getClass(), "empty.xml");

    File reportDir = temp.newFolder();
    BatchReportWriter writer = new BatchReportWriter(reportDir);
    writer.writeMetadata(
        BatchReport.Metadata.newBuilder()
            .setRootComponentRef(1)
            .setProjectKey("PROJECT_KEY")
            .setAnalysisDate(150000000L)
            .build());

    writer.writeComponent(
        BatchReport.Component.newBuilder()
            .setRef(1)
            .setType(Constants.ComponentType.PROJECT)
            .setUuid("ABCD")
            .setSnapshotId(1000L)
            .addEvent(
                BatchReport.Event.newBuilder()
                    .setName("Red (was Orange)")
                    .setCategory(Constants.EventCategory.ALERT)
                    .setDescription("Open issues > 0")
                    .build())
            .addChildRef(2)
            .build());

    writer.writeComponent(
        BatchReport.Component.newBuilder()
            .setRef(2)
            .setType(Constants.ComponentType.MODULE)
            .setUuid("BCDE")
            .setSnapshotId(1001L)
            .addEvent(
                BatchReport.Event.newBuilder()
                    .setName("Red (was Orange)")
                    .setCategory(Constants.EventCategory.ALERT)
                    .setDescription("Open issues > 0")
                    .build())
            .build());

    step.execute(
        new ComputationContext(new BatchReportReader(reportDir), mock(ComponentDto.class)));

    dbTester.assertDbUnit(
        getClass(), "persist_report_events_with_component_children-result.xml", "events");
  }
  @Test
  public void persist_report_events() throws Exception {
    dbTester.prepareDbUnit(getClass(), "empty.xml");

    File reportDir = temp.newFolder();
    BatchReportWriter writer = new BatchReportWriter(reportDir);
    writer.writeMetadata(
        BatchReport.Metadata.newBuilder()
            .setRootComponentRef(1)
            .setProjectKey("PROJECT_KEY")
            .setAnalysisDate(150000000L)
            .build());

    writer.writeComponent(
        BatchReport.Component.newBuilder()
            .setRef(1)
            .setType(Constants.ComponentType.PROJECT)
            .setUuid("ABCD")
            .setSnapshotId(1000L)
            .addEvent(
                BatchReport.Event.newBuilder()
                    .setName("Red (was Orange)")
                    .setCategory(Constants.EventCategory.ALERT)
                    .setDescription("Open issues > 0")
                    .build())
            .addEvent(
                BatchReport.Event.newBuilder()
                    .setName("Changes in 'Default' (Java)")
                    .setCategory(Constants.EventCategory.PROFILE)
                    .setEventData(
                        "from=2014-10-12T08:36:25+0000;key=java-default;to=2014-10-12T10:36:25+0000")
                    .build())
            .build());

    step.execute(
        new ComputationContext(new BatchReportReader(reportDir), mock(ComponentDto.class)));

    dbTester.assertDbUnit(getClass(), "add_events-result.xml", "events");
  }