TSAddParamsTest.java

package redis.clients.jedis.timeseries;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static redis.clients.jedis.timeseries.TimeSeriesProtocol.TimeSeriesKeyword.DUPLICATE_POLICY;
import static redis.clients.jedis.timeseries.TimeSeriesProtocol.TimeSeriesKeyword.ON_DUPLICATE;
import static redis.clients.jedis.util.CommandArgumentsMatchers.hasArgumentCount;
import static redis.clients.jedis.util.CommandArgumentsMatchers.hasArguments;

import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import redis.clients.jedis.CommandArguments;
import redis.clients.jedis.args.RawableFactory;
import redis.clients.jedis.timeseries.TimeSeriesProtocol.TimeSeriesCommand;

public class TSAddParamsTest {

  private static CommandArguments tsAddArgs() {
    // mirrors CommandObjects.tsAdd(key, timestamp, value, params)
    return new CommandArguments(TimeSeriesCommand.ADD).key("ts:1").add(1000L).add(25.5);
  }

  @Nested
  class AddParamsTests {

    @Test
    public void noOptionalParamsAddsNothing() {
      CommandArguments args = tsAddArgs();
      TSAddParams.addParams().addParams(args);

      // Expected: TS.ADD ts:1 1000 25.5
      assertThat(args, hasArgumentCount(4));
      assertThat(args, hasArguments(TimeSeriesCommand.ADD, RawableFactory.from("ts:1"),
        RawableFactory.from(1000L), RawableFactory.from(25.5)));
    }

    @Test
    public void duplicatePolicy() {
      CommandArguments args = tsAddArgs();
      TSAddParams.addParams().duplicatePolicy(DuplicatePolicy.LAST).addParams(args);

      // Expected: TS.ADD ts:1 1000 25.5 DUPLICATE_POLICY LAST
      assertThat(args, hasArgumentCount(6));
      assertThat(args,
        hasArguments(TimeSeriesCommand.ADD, RawableFactory.from("ts:1"), RawableFactory.from(1000L),
          RawableFactory.from(25.5), DUPLICATE_POLICY, DuplicatePolicy.LAST));
    }

    @Test
    public void duplicatePolicyWithOnDuplicate() {
      CommandArguments args = tsAddArgs();
      TSAddParams.addParams().duplicatePolicy(DuplicatePolicy.LAST)
          .onDuplicate(DuplicatePolicy.FIRST).addParams(args);

      // Expected: TS.ADD ts:1 1000 25.5 DUPLICATE_POLICY LAST ON_DUPLICATE FIRST
      assertThat(args, hasArgumentCount(8));
      assertThat(args,
        hasArguments(TimeSeriesCommand.ADD, RawableFactory.from("ts:1"), RawableFactory.from(1000L),
          RawableFactory.from(25.5), DUPLICATE_POLICY, DuplicatePolicy.LAST, ON_DUPLICATE,
          DuplicatePolicy.FIRST));
    }
  }

  @Nested
  class EqualsHashCodeTests {

    @Test
    public void equalWhenSameConfiguration() {
      TSAddParams a = TSAddParams.addParams().duplicatePolicy(DuplicatePolicy.LAST)
          .onDuplicate(DuplicatePolicy.FIRST);
      TSAddParams b = TSAddParams.addParams().duplicatePolicy(DuplicatePolicy.LAST)
          .onDuplicate(DuplicatePolicy.FIRST);
      assertEquals(a, b);
      assertEquals(a.hashCode(), b.hashCode());
    }

    @Test
    public void notEqualWhenDuplicatePolicyDiffers() {
      assertNotEquals(TSAddParams.addParams().duplicatePolicy(DuplicatePolicy.LAST),
        TSAddParams.addParams().duplicatePolicy(DuplicatePolicy.FIRST));
    }
  }
}