public void clockOffsetShouldEffectBeatTiming()

in component-test/src/main/java/org/apache/fineract/cn/rhythm/TestBeats.java [159:200]


  public void clockOffsetShouldEffectBeatTiming() throws InterruptedException {
    final String tenantIdentifier = tenantDataStoreContext.getTenantName();
    final String applicationIdentifier = "funnybusiness-v7";
    final String beatIdentifier = "fiddlebeat0";

    final ClockOffset initialClockOffset = this.testSubject.getClockOffset();
    Assert.assertEquals(Integer.valueOf(0), initialClockOffset.getHours());
    Assert.assertEquals(Integer.valueOf(0), initialClockOffset.getMinutes());
    Assert.assertEquals(Integer.valueOf(0), initialClockOffset.getSeconds());

    final LocalDateTime now = LocalDateTime.now(Clock.systemUTC());
    final ClockOffset offsetToNow = new ClockOffset(now.getHour(), now.getMinute(), now.getSecond());
    this.testSubject.setClockOffset(offsetToNow);

    Assert.assertTrue(this.eventRecorder.wait(EventConstants.PUT_CLOCKOFFSET, offsetToNow));
    TimeUnit.SECONDS.sleep(1);
    final ClockOffset changedClockOffset = this.testSubject.getClockOffset();
    Assert.assertEquals(offsetToNow, changedClockOffset);

    final Beat beat = new Beat();
    beat.setIdentifier(beatIdentifier);
    beat.setAlignmentHour(0);

    final LocalDateTime expectedBeatTimestamp = getExpectedBeatTimestamp(now, 0, offsetToNow);

    Mockito.doReturn(Optional.of("boop")).when(beatPublisherServiceMock)
        .requestPermissionForBeats(Matchers.eq(tenantIdentifier), Matchers.eq(applicationIdentifier));
    Mockito.when(beatPublisherServiceMock
        .publishBeat(beatIdentifier, tenantIdentifier, applicationIdentifier, expectedBeatTimestamp))
        .thenReturn(true);

    this.testSubject.createBeat(applicationIdentifier, beat);

    Assert.assertTrue(this.eventRecorder.wait(EventConstants.POST_BEAT, new BeatEvent(applicationIdentifier, beat.getIdentifier())));

    Mockito.verify(beatPublisherServiceMock, Mockito.timeout(10_000).times(1)).publishBeat(beatIdentifier, tenantIdentifier, applicationIdentifier, expectedBeatTimestamp);

    //Set back to zero'ed clock offset so you don't break the rest of the tests.
    this.testSubject.setClockOffset(initialClockOffset);
    Assert.assertTrue(this.eventRecorder.wait(EventConstants.PUT_CLOCKOFFSET, initialClockOffset));
    TimeUnit.SECONDS.sleep(1);
  }