/storage-units-mongodb/src/test/java/de/xn__ho_hia/storage_unit/mongodb/StorageUnitCodecTest.java

https://gitlab.com/sebastian.hoss/storage-units · Java · 114 lines · 66 code · 15 blank · 33 comment · 0 complexity · 07f91632c89cb3449a8a0e85cdd9cf5c MD5 · raw file

  1. /*
  2. * This file is part of storage-units. It is subject to the license terms in the LICENSE file found in the top-level
  3. * directory of this distribution and at http://creativecommons.org/publicdomain/zero/1.0/. No part of storage-units,
  4. * including this file, may be copied, modified, propagated, or distributed except according to the terms contained
  5. * in the LICENSE file.
  6. */
  7. package de.xn__ho_hia.storage_unit.mongodb;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10. import java.util.function.Supplier;
  11. import org.bson.BsonReader;
  12. import org.bson.BsonWriter;
  13. import org.bson.codecs.DecoderContext;
  14. import org.bson.codecs.EncoderContext;
  15. import org.jooq.lambda.tuple.Tuple2;
  16. import org.junit.Assert;
  17. import org.junit.experimental.theories.DataPoints;
  18. import org.junit.experimental.theories.FromDataPoints;
  19. import org.junit.experimental.theories.Theories;
  20. import org.junit.experimental.theories.Theory;
  21. import org.junit.runner.RunWith;
  22. import org.mockito.BDDMockito;
  23. import org.mockito.Mockito;
  24. import de.xn__ho_hia.quality.suppression.CompilerWarnings;
  25. import de.xn__ho_hia.storage_unit.CommonKilobyte;
  26. import de.xn__ho_hia.storage_unit.Kibibyte;
  27. import de.xn__ho_hia.storage_unit.Kilobyte;
  28. import de.xn__ho_hia.storage_unit.StorageUnit;
  29. import de.xn__ho_hia.storage_unit.StorageUnits;
  30. /**
  31. *
  32. */
  33. @RunWith(Theories.class)
  34. @SuppressWarnings(CompilerWarnings.STATIC_METHOD)
  35. public class StorageUnitCodecTest {
  36. /**
  37. * @return Suppliers to create a storage-unit codec.
  38. */
  39. @DataPoints("supplier")
  40. public static final List<Tuple2<Supplier<AbstractStorageUnitCodec>, Class<?>>> suppliers() {
  41. final List<Tuple2<Supplier<AbstractStorageUnitCodec>, Class<?>>> suppliers = new ArrayList<>();
  42. suppliers.add(new Tuple2<>(BinaryStorageUnitCodec::new, Kibibyte.class));
  43. suppliers.add(new Tuple2<>(CommonStorageUnitCodec::new, CommonKilobyte.class));
  44. suppliers.add(new Tuple2<>(DecimalStorageUnitCodec::new, Kilobyte.class));
  45. return suppliers;
  46. }
  47. /**
  48. * @param supplier
  49. * The supplier to use.
  50. */
  51. @Theory
  52. public void shouldEncodeStorageUnitClass(
  53. @FromDataPoints("supplier") final Tuple2<Supplier<AbstractStorageUnitCodec>, Class<?>> supplier) {
  54. // given
  55. final AbstractStorageUnitCodec codec = supplier.v1.get();
  56. // when
  57. final Class<StorageUnit<?>> encoderClass = codec.getEncoderClass();
  58. // then
  59. Assert.assertNotNull(encoderClass);
  60. Assert.assertEquals(StorageUnit.class, encoderClass);
  61. }
  62. /**
  63. * @param supplier
  64. * The supplier to use.
  65. */
  66. @Theory
  67. @SuppressWarnings(CompilerWarnings.NLS)
  68. public void shouldEncodeStorageUnit(
  69. @FromDataPoints("supplier") final Tuple2<Supplier<AbstractStorageUnitCodec>, Class<?>> supplier) {
  70. // given
  71. final AbstractStorageUnitCodec codec = supplier.v1.get();
  72. final BsonWriter writer = Mockito.mock(BsonWriter.class);
  73. final EncoderContext context = EncoderContext.builder().build();
  74. final StorageUnit<?> value = StorageUnits.kilobyte(1L);
  75. // when
  76. codec.encode(writer, value, context);
  77. // then
  78. Mockito.verify(writer).writeString("1000");
  79. }
  80. /**
  81. * @param supplier
  82. * The supplier to use.
  83. */
  84. @Theory
  85. @SuppressWarnings(CompilerWarnings.NLS)
  86. public void shouldDecodeStorageUnit(
  87. @FromDataPoints("supplier") final Tuple2<Supplier<AbstractStorageUnitCodec>, Class<?>> supplier) {
  88. // given
  89. final AbstractStorageUnitCodec codec = supplier.v1.get();
  90. final BsonReader reader = Mockito.mock(BsonReader.class);
  91. final DecoderContext context = DecoderContext.builder().build();
  92. BDDMockito.given(reader.readString()).willReturn("2000");
  93. // when
  94. final StorageUnit<?> value = codec.decode(reader, context);
  95. // then
  96. Assert.assertNotNull(value);
  97. Assert.assertEquals(supplier.v2, value.getClass());
  98. }
  99. }