コード例 #1
0
  @Test
  public void testMergesHDandSDforFilms() {
    BtVodEntry btVodEntrySD = filmRow("About Alex");
    btVodEntrySD.setProductTargetBandwidth("SD");

    BtVodEntry btVodEntryHD = filmRow("About Alex - HD");
    btVodEntryHD.setGuid(PRODUCT_GUID + "_HD");
    btVodEntryHD.setProductTargetBandwidth("HD");

    when(imageExtractor.imagesFor(Matchers.<BtVodEntry>any())).thenReturn(ImmutableSet.<Image>of());

    when(btVodBrandProvider.brandRefFor(btVodEntrySD)).thenReturn(Optional.<ParentRef>absent());
    when(btVodBrandProvider.brandRefFor(btVodEntryHD)).thenReturn(Optional.<ParentRef>absent());

    when(seriesProvider.seriesFor(btVodEntryHD)).thenReturn(Optional.<Series>absent());
    when(seriesProvider.seriesFor(btVodEntrySD)).thenReturn(Optional.<Series>absent());

    itemExtractor.process(btVodEntrySD);
    itemExtractor.process(btVodEntryHD);

    Item writtenItem = Iterables.getOnlyElement(itemExtractor.getProcessedItems().values());

    assertThat(writtenItem.getTitle(), is("About Alex"));
    assertThat(writtenItem.getDescription(), is(SYNOPSIS));

    assertThat(writtenItem.getVersions().size(), is(2));

    Version hdVersion = Iterables.get(writtenItem.getVersions(), 0);
    Version sdVersion = Iterables.get(writtenItem.getVersions(), 1);
    assertThat(
        Iterables.getOnlyElement(sdVersion.getManifestedAs()).getHighDefinition(), is(false));
    assertThat(Iterables.getOnlyElement(hdVersion.getManifestedAs()).getHighDefinition(), is(true));
  }
コード例 #2
0
  @Test
  public void testMergesImagesAndDescriptionsForHDAndSD() {
    BtVodEntry btVodEntrySD = filmRow("About Alex");
    btVodEntrySD.setProductTargetBandwidth("SD");
    btVodEntrySD.setDescription("sd");
    btVodEntrySD.setProductLongDescription("sdLong");

    BtVodEntry btVodEntryHD = filmRow("About Alex - HD");
    btVodEntryHD.setGuid(PRODUCT_GUID + "_HD");
    btVodEntryHD.setProductTargetBandwidth("HD");
    btVodEntryHD.setDescription("hd");
    btVodEntryHD.setProductLongDescription("hdLong");

    Image sdImage = new Image("sdImage");
    Image hdImage = new Image("hdImage");

    when(imageExtractor.imagesFor(btVodEntrySD)).thenReturn(ImmutableSet.of(sdImage));
    when(imageExtractor.imagesFor(btVodEntryHD)).thenReturn(ImmutableSet.of(hdImage));

    when(btVodBrandProvider.brandRefFor(btVodEntrySD)).thenReturn(Optional.<ParentRef>absent());
    when(btVodBrandProvider.brandRefFor(btVodEntryHD)).thenReturn(Optional.<ParentRef>absent());

    when(seriesProvider.seriesFor(btVodEntryHD)).thenReturn(Optional.<Series>absent());
    when(seriesProvider.seriesFor(btVodEntrySD)).thenReturn(Optional.<Series>absent());

    itemExtractor.process(btVodEntrySD);
    itemExtractor.process(btVodEntryHD);

    Item item = Iterables.get(itemExtractor.getProcessedItems().values(), 0);

    verify(descriptionAndImageUpdater)
        .updateDescriptionsAndImages(
            eq(item), eq(btVodEntryHD), eq(ImmutableSet.of(hdImage)), anySet());
  }
コード例 #3
0
  @Test
  public void testDoesntMergeEpisodesWithSameTitleAcrossDifferentBrands() {
    BtVodEntry btVodEntry =
        episodeRow(SERIES_TITLE + ": S1 S1-E9 " + REAL_EPISODE_TITLE, PRODUCT_GUID);
    BtVodEntry btVodEntryFromDifferentSeries =
        episodeRow("A different " + SERIES_TITLE + ": S1 S1-E9 " + REAL_EPISODE_TITLE, "99999");

    ParentRef parentRef = new ParentRef(BRAND_URI);
    ParentRef parentRefDiffSeries = new ParentRef(URI_PREFIX + "brands/a-different-1234");

    Series series = new Series();
    series.setCanonicalUri("seriesUri");
    series.withSeriesNumber(1);

    when(seriesProvider.seriesFor(btVodEntry)).thenReturn(Optional.of(series));

    when(imageExtractor.imagesFor(Matchers.<BtVodEntry>any())).thenReturn(ImmutableSet.<Image>of());

    when(btVodBrandProvider.brandRefFor(btVodEntry)).thenReturn(Optional.of(parentRef));
    when(btVodBrandProvider.brandRefFor(btVodEntryFromDifferentSeries))
        .thenReturn(Optional.of(parentRefDiffSeries));
    when(seriesProvider.seriesFor(btVodEntry)).thenReturn(Optional.of(series));
    when(seriesProvider.seriesFor(btVodEntryFromDifferentSeries)).thenReturn(Optional.of(series));

    itemExtractor.process(btVodEntry);
    itemExtractor.process(btVodEntryFromDifferentSeries);

    assertThat(itemExtractor.getProcessedItems().size(), is(2));
  }
コード例 #4
0
  @Test
  public void testMergesFilmsFromCurzon() {
    BtVodEntry btVodEntrySD = filmRow("Amour");

    BtVodEntry btVodEntryHD = filmRow("Amour (Curzon)");
    btVodEntryHD.setGuid(PRODUCT_GUID + "Curzon");

    BtVodEntry btVodEntryHDCurzon = filmRow("Amour (Curzon) - HD");
    btVodEntryHDCurzon.setGuid(PRODUCT_GUID + "Curzon_HD");

    when(imageExtractor.imagesFor(Matchers.<BtVodEntry>any())).thenReturn(ImmutableSet.<Image>of());

    when(btVodBrandProvider.brandRefFor(btVodEntrySD)).thenReturn(Optional.<ParentRef>absent());
    when(btVodBrandProvider.brandRefFor(btVodEntryHD)).thenReturn(Optional.<ParentRef>absent());
    when(btVodBrandProvider.brandRefFor(btVodEntryHDCurzon))
        .thenReturn(Optional.<ParentRef>absent());

    when(seriesProvider.seriesFor(btVodEntrySD)).thenReturn(Optional.<Series>absent());
    when(seriesProvider.seriesFor(btVodEntryHD)).thenReturn(Optional.<Series>absent());
    when(seriesProvider.seriesFor(btVodEntryHDCurzon)).thenReturn(Optional.<Series>absent());

    itemExtractor.process(btVodEntrySD);
    itemExtractor.process(btVodEntryHD);
    itemExtractor.process(btVodEntryHDCurzon);

    Item writtenItem = Iterables.getOnlyElement(itemExtractor.getProcessedItems().values());

    assertThat(writtenItem.getTitle(), is("Amour"));
    assertThat(writtenItem.getDescription(), is(SYNOPSIS));

    assertThat(writtenItem.getVersions().size(), is(3));
  }
コード例 #5
0
  @Test
  public void testMergesAndDedupesTopicsAcrossVariants() {
    BtVodEntry btVodEntrySD = episodeRow(FULL_EPISODE_TITLE, PRODUCT_GUID);
    ParentRef parentRef = new ParentRef(BRAND_URI);
    Series series = new Series();
    series.setCanonicalUri("seriesUri");
    series.withSeriesNumber(1);

    BtVodEntry btVodEntryHD = episodeRow(FULL_EPISODE_TITLE, PRODUCT_GUID);
    btVodEntryHD.setTitle(FULL_EPISODE_TITLE + " - HD");
    btVodEntryHD.setGuid(PRODUCT_GUID + "_HD");

    when(seriesProvider.seriesFor(btVodEntrySD)).thenReturn(Optional.of(series));
    when(seriesProvider.seriesFor(btVodEntryHD)).thenReturn(Optional.of(series));

    when(imageExtractor.imagesFor(Matchers.<BtVodEntry>any())).thenReturn(ImmutableSet.<Image>of());
    when(btVodBrandProvider.brandRefFor(btVodEntrySD)).thenReturn(Optional.of(parentRef));
    when(btVodBrandProvider.brandRefFor(btVodEntryHD)).thenReturn(Optional.of(parentRef));
    when(newTopicContentMatchingPredicate.apply(isA(VodEntryAndContent.class))).thenReturn(true);
    when(kidsTopicPredicate.apply(argThat(new VodEntryHasGuid(btVodEntryHD.getGuid()))))
        .thenReturn(true);

    itemExtractor.process(btVodEntrySD);
    itemExtractor.process(btVodEntryHD);

    Item writtenItem = Iterables.getOnlyElement(itemExtractor.getProcessedItems().values());

    assertThat(writtenItem.getTopicRefs().size(), is(2));
  }
コード例 #6
0
  @Test
  public void testMergesVersionsForHDandSD() {
    BtVodEntry btVodEntrySD = episodeRow(FULL_EPISODE_TITLE, PRODUCT_GUID);
    ParentRef parentRef = new ParentRef(BRAND_URI);
    Series series = new Series();
    series.setCanonicalUri("seriesUri");
    series.withSeriesNumber(1);

    BtVodEntry btVodEntryHD = episodeRow(FULL_EPISODE_TITLE, PRODUCT_GUID);
    btVodEntryHD.setTitle(FULL_EPISODE_TITLE + " - HD");
    btVodEntryHD.setGuid(PRODUCT_GUID + "_HD");

    when(seriesProvider.seriesFor(btVodEntrySD)).thenReturn(Optional.of(series));
    when(seriesProvider.seriesFor(btVodEntryHD)).thenReturn(Optional.of(series));

    when(imageExtractor.imagesFor(Matchers.<BtVodEntry>any())).thenReturn(ImmutableSet.<Image>of());
    when(btVodBrandProvider.brandRefFor(btVodEntrySD)).thenReturn(Optional.of(parentRef));
    when(btVodBrandProvider.brandRefFor(btVodEntryHD)).thenReturn(Optional.of(parentRef));

    itemExtractor.process(btVodEntrySD);
    itemExtractor.process(btVodEntryHD);

    Item writtenItem = Iterables.getOnlyElement(itemExtractor.getProcessedItems().values());

    assertThat(writtenItem.getTitle(), is(REAL_EPISODE_TITLE));
    assertThat(writtenItem.getDescription(), is(SYNOPSIS));
    assertThat(writtenItem.getContainer(), is(parentRef));

    assertThat(writtenItem.getVersions().size(), is(2));
    assertThat(writtenItem.getClips().size(), is(2));
  }
コード例 #7
0
  @Test
  public void testExtractsEpisode() {
    BtVodEntry btVodEntry = episodeRow(FULL_EPISODE_TITLE, PRODUCT_GUID);
    ParentRef parentRef = new ParentRef(BRAND_URI);
    Series series = new Series();
    series.setCanonicalUri("seriesUri");
    series.withSeriesNumber(1);

    when(seriesProvider.seriesFor(btVodEntry)).thenReturn(Optional.of(series));

    when(imageExtractor.imagesFor(Matchers.<BtVodEntry>any())).thenReturn(ImmutableSet.<Image>of());
    when(btVodBrandProvider.brandRefFor(btVodEntry)).thenReturn(Optional.of(parentRef));

    itemExtractor.process(btVodEntry);
    Item writtenItem = Iterables.getOnlyElement(itemExtractor.getProcessedItems().values());

    assertThat(writtenItem.getTitle(), is(REAL_EPISODE_TITLE));
    assertThat(writtenItem.getDescription(), is(SYNOPSIS));
    assertThat(writtenItem.getContainer(), is(parentRef));

    Location location =
        Iterables.getOnlyElement(
            Iterables.getOnlyElement(
                    Iterables.getOnlyElement(writtenItem.getVersions()).getManifestedAs())
                .getAvailableAt());

    DateTime expectedAvailabilityStart =
        new DateTime(2013, DateTimeConstants.APRIL, 1, 0, 0, 0, 0, DateTimeZone.UTC);
    DateTime expectedAvailabilityEnd =
        new DateTime(2014, DateTimeConstants.APRIL, 30, 0, 0, 0, 0, DateTimeZone.UTC);
    assertThat(location.getPolicy().getAvailabilityStart(), is(expectedAvailabilityStart));
    assertThat(location.getPolicy().getAvailabilityEnd(), is(expectedAvailabilityEnd));
    assertThat(
        location.getPolicy().getSubscriptionPackages(),
        is((Set<String>) ImmutableSet.of(SUBSCRIPTION_CODE)));
    assertThat(
        Iterables.getOnlyElement(writtenItem.getClips()),
        is(new Clip(TRAILER_URI, TRAILER_URI, Publisher.BT_VOD)));

    Set<Alias> expectedAliases =
        ImmutableSet.of(
            new Alias(BT_VOD_GUID_NAMESPACE, btVodEntry.getGuid()),
            new Alias(BT_VOD_ID_NAMESPACE, btVodEntry.getId()));

    assertThat(writtenItem.getAliases(), is(expectedAliases));
    assertThat(
        Iterables.getOnlyElement(location.getPolicy().getAvailableCountries()).code(), is("GB"));
    assertThat(location.getPolicy().getRevenueContract(), is(RevenueContract.SUBSCRIPTION));
  }
コード例 #8
0
  @Test
  public void testDoesNotCreatePayToXLocationsWithZeroPrice() {
    BtVodEntry btVodEntry =
        episodeRow(SERIES_TITLE + ": S1 S1-E9 " + REAL_EPISODE_TITLE, PRODUCT_GUID);

    btVodEntry.setProductOfferingType("type-EST");

    BtVodProductPricingPlan pricingPlan = new BtVodProductPricingPlan();

    BtVodProductPricingTier pricingTier = new BtVodProductPricingTier();
    pricingTier.setProductAbsoluteStart(DateTime.now().minusMonths(2).getMillis());
    pricingTier.setProductAbsoluteEnd(DateTime.now().plusMonths(2).getMillis());

    BtVodProductAmounts productAmounts = new BtVodProductAmounts();
    productAmounts.setGBP(0D);

    pricingTier.setProductAmounts(productAmounts);
    pricingPlan.setProductPricingTiers(Lists.newArrayList(pricingTier));
    btVodEntry.setProductPricingPlan(pricingPlan);

    ParentRef parentRef = new ParentRef(BRAND_URI);

    Series series = new Series();
    series.setCanonicalUri("seriesUri");
    series.withSeriesNumber(1);

    when(seriesProvider.seriesFor(btVodEntry)).thenReturn(Optional.of(series));
    when(imageExtractor.imagesFor(Matchers.<BtVodEntry>any())).thenReturn(ImmutableSet.<Image>of());
    when(btVodBrandProvider.brandRefFor(btVodEntry)).thenReturn(Optional.of(parentRef));
    when(seriesProvider.seriesFor(btVodEntry)).thenReturn(Optional.of(series));

    itemExtractor.process(btVodEntry);

    assertThat(itemExtractor.getProcessedItems().size(), is(1));

    Item item = Iterables.getOnlyElement(itemExtractor.getProcessedItems().values());
    Version version = Iterables.getOnlyElement(item.getVersions());
    Encoding encoding = Iterables.getOnlyElement(version.getManifestedAs());

    assertThat(encoding.getAvailableAt().size(), is(1));

    Location location = Iterables.getOnlyElement(encoding.getAvailableAt());
    assertThat(
        location.getCanonicalUri().contains(RevenueContract.PAY_TO_BUY.toString()), is(false));
    assertThat(
        location.getCanonicalUri().contains(RevenueContract.PAY_TO_RENT.toString()), is(false));
  }
コード例 #9
0
  private void testHdSdMerging(String hdTitle, String sdTitle, String extractedTitle) {
    BtVodEntry btVodEntrySD = episodeRow(FULL_EPISODE_TITLE, PRODUCT_GUID);
    btVodEntrySD.setTitle(sdTitle);
    ParentRef parentRef = new ParentRef(BRAND_URI);
    btVodEntrySD.setProductTargetBandwidth("SD");

    BtVodEntry btVodEntryHD = episodeRow(FULL_EPISODE_TITLE, PRODUCT_GUID);
    btVodEntryHD.setTitle(hdTitle);
    btVodEntryHD.setGuid(PRODUCT_GUID + "_HD");
    btVodEntryHD.setProductTargetBandwidth("HD");

    Series series = new Series();
    series.setCanonicalUri("seriesUri");
    series.withSeriesNumber(1);

    when(seriesProvider.seriesFor(btVodEntrySD)).thenReturn(Optional.of(series));
    when(seriesProvider.seriesFor(btVodEntryHD)).thenReturn(Optional.of(series));

    when(imageExtractor.imagesFor(Matchers.<BtVodEntry>any())).thenReturn(ImmutableSet.<Image>of());
    when(btVodBrandProvider.brandRefFor(btVodEntrySD)).thenReturn(Optional.of(parentRef));
    when(btVodBrandProvider.brandRefFor(btVodEntryHD)).thenReturn(Optional.of(parentRef));

    itemExtractor.process(btVodEntrySD);
    itemExtractor.process(btVodEntryHD);

    Item writtenItem = Iterables.getOnlyElement(itemExtractor.getProcessedItems().values());

    assertThat(writtenItem.getTitle(), is(extractedTitle));
    assertThat(writtenItem.getDescription(), is(SYNOPSIS));
    assertThat(writtenItem.getContainer(), is(parentRef));

    assertThat(writtenItem.getVersions().size(), is(2));

    Version hdVersion = Iterables.get(writtenItem.getVersions(), 0);
    Version sdVersion = Iterables.get(writtenItem.getVersions(), 1);
    assertThat(
        Iterables.getOnlyElement(sdVersion.getManifestedAs()).getHighDefinition(), is(false));
    assertThat(Iterables.getOnlyElement(hdVersion.getManifestedAs()).getHighDefinition(), is(true));
    assertThat(
        Iterables.getFirst(writtenItem.getClips(), null),
        is(new Clip(TRAILER_URI, TRAILER_URI, Publisher.BT_VOD)));
  }
コード例 #10
0
  @Test
  public void testUpdatesBrandAndSeriesFromEpisode() {
    BtVodEntry btVodEntry = episodeRow(FULL_EPISODE_TITLE, PRODUCT_GUID);
    ParentRef parentRef = new ParentRef(BRAND_URI);
    Series series = mock(Series.class);
    when(series.getCanonicalUri()).thenReturn("seriesUri");
    when(series.getSeriesNumber()).thenReturn(1);

    when(seriesProvider.seriesFor(btVodEntry)).thenReturn(Optional.of(series));

    when(imageExtractor.imagesFor(Matchers.<BtVodEntry>any())).thenReturn(ImmutableSet.<Image>of());
    when(btVodBrandProvider.brandRefFor(btVodEntry)).thenReturn(Optional.of(parentRef));
    when(newTopicContentMatchingPredicate.apply(isA(VodEntryAndContent.class))).thenReturn(true);

    itemExtractor.process(btVodEntry);

    Item writtenItem = Iterables.getOnlyElement(itemExtractor.getProcessedItems().values());

    assertThat(writtenItem.getTopicRefs().contains(newTopicRef), is(true));

    verify(btVodBrandProvider).updateBrandFromEpisode(btVodEntry, (Episode) writtenItem);
    verify(seriesProvider).updateSeriesFromEpisode(btVodEntry, (Episode) writtenItem);
  }
コード例 #11
0
  @Test
  @Ignore
  // Ingored until we have real data which allows us to
  // correctly implement availability criteria
  public void testOnlyExtractsTrailerWhenMatchesCriteria() {
    BtVodEntry btVodEntry = episodeRow(FULL_EPISODE_TITLE, PRODUCT_GUID);
    ParentRef parentRef = new ParentRef(BRAND_URI);

    when(imageExtractor.imagesFor(Matchers.<BtVodEntry>any())).thenReturn(ImmutableSet.<Image>of());
    when(seriesProvider.seriesFor(btVodEntry)).thenReturn(Optional.of(mock(Series.class)));
    when(btVodBrandProvider.brandRefFor(btVodEntry)).thenReturn(Optional.of(parentRef));

    btVodEntry.setProductTags(ImmutableList.<BtVodPlproduct$productTag>of());

    Item writtenItem = Iterables.getOnlyElement(itemExtractor.getProcessedItems().values());

    assertTrue(writtenItem.getClips().isEmpty());
  }