def test_generate_every_dimension_combination_multiple(self):
    """Tests the generate_every_combination method for a complex report.

    A report is generated with two dimensions, one having three values and
    the other one having two. The list of combinations should have length 2x3.
    """
    dimensions = [u'PLATFORM_TYPE', u'ANOTHER_DIMENSION']
    dimension_values = {u'PLATFORM_TYPE': [
        u'Desktop', u'High-end mobile devices', u'Tablets'],
                        u'ANOTHER_DIMENSION': [u'Value1', u'Value2']}
    generatedr = [self.FakeReport(
        dimensions=dimensions, dimension_values=dimension_values).generate()]
    datacollator = adsense_util_data_collator.DataCollator(generatedr)

    expected_multiple_dimensions = [
        (u'Desktop', u'Value1'),
        (u'Desktop', u'Value2'),
        (u'High-end mobile devices', u'Value1'),
        (u'High-end mobile devices', u'Value2'),
        (u'Tablets', u'Value1'),
        (u'Tablets', u'Value2')]

    # Sets can be used to compare as the combinations are unique.
    self.assertEquals(
        set([x for x in datacollator._generate_every_dimension_combination()]),
        set(expected_multiple_dimensions))
  def test_collate_data_complex_week(self):
    reports_multiple_dim_values = {
        'PLATFORM_TYPE': ['Desktop', 'High-end mobile devices', 'Tablets'],
        'ANOTHER_DIMENSION': ['Value1', 'Value2']
        }
    reports_multiple_dim = [self.FakeReport(
        start_date='2014-02-06', end_date='2014-04-07',
        time_dimensions=['MONTH', 'WEEK'],
        dimensions=['PLATFORM_TYPE', 'ANOTHER_DIMENSION'],
        dimension_values=reports_multiple_dim_values).generate()]

    collator = adsense_util_data_collator.DataCollator(reports_multiple_dim)

    # Common test for every collated report.
    result = self._run_common_tests_and_get_result(collator)
    self.assertTrue(collator.week_index != -1)

    # The number of weeks includes 2014-02-24 twice because it runs between
    # months (ends in March).
    number_of_weeks = 10

    different_dim_values = (
        len(reports_multiple_dim_values['PLATFORM_TYPE'])
        * len(reports_multiple_dim_values['ANOTHER_DIMENSION']))
    self.assertEquals(len(result['rows']),
                      number_of_weeks * different_dim_values)
 def test_multiple_reports_without_date_filling(self):
   """Tests two contiguous reports."""
   report1 = self.FakeReport(start_date='2013-01-01', end_date='2013-01-03',
                             time_dimensions=['DATE'], dimensions=[])
   report2 = self.FakeReport(start_date='2013-01-04', end_date='2013-01-06',
                             time_dimensions=['DATE'], dimensions=[])
   reports = [report1.generate(), report2.generate()]
   datacollator = adsense_util_data_collator.DataCollator(reports)
   resulting_report = datacollator.collate_data()
   self.assertEquals(len(resulting_report['rows']), 6)
 def test_no_time_dimensions_report(self):
   dimensions = ['DIM1']
   dimension_values = {
       'DIM1': ['Value1', 'Value2']}
   report1 = self.FakeReport(start_date='2013-01-01',
                             end_date='2013-01-03',
                             row_fill_factor=1,
                             dimensions=dimensions,
                             time_dimensions=[],
                             dimension_values=dimension_values).generate()
   datacollator = adsense_util_data_collator.DataCollator([report1])
   resulting_report = datacollator.collate_data()
   self.assertEquals(len(resulting_report['rows']), 2)
  def test_multiple_empty_reports_with_date_filling(self):
    """Tests an empty report just with one time dimension."""
    report1 = self.FakeReport(start_date='2013-01-01', end_date='2013-01-03',
                              time_dimensions=['DATE'], row_fill_factor=0,
                              dimensions=[])
    report2 = self.FakeReport(start_date='2013-01-04', end_date='2013-01-06',
                              time_dimensions=['DATE'], row_fill_factor=0,
                              dimensions=[])
    reports = [report1.generate(), report2.generate()]
    datacollator = adsense_util_data_collator.DataCollator(reports)
    resulting_report = datacollator.collate_data()

    self.assertEquals(len(resulting_report['rows']), 6)
  def test_collate_data_complex(self):
    reports_multiple_dim_values = {
        'PLATFORM_TYPE': ['Desktop', 'High-end mobile devices', 'Tablets'],
        'ANOTHER_DIMENSION': ['Value1', 'Value2']
        }
    reports_multiple_dim = [self.FakeReport(
        start_date='2014-02-06', end_date='2014-04-07',
        time_dimensions=['MONTH'],
        dimensions=['PLATFORM_TYPE', 'ANOTHER_DIMENSION'],
        dimension_values=reports_multiple_dim_values).generate()]

    collator = adsense_util_data_collator.DataCollator(reports_multiple_dim)

    self._run_common_tests_and_get_result(collator)
  def test_same_row_different_reports(self):
    """Tests for duplicated rows.

    Only the first row should be returned.
    """
    # 2013-01-03 will be duplicated.
    report1 = self.FakeReport(start_date='2013-01-01', end_date='2013-01-03',
                              time_dimensions=['DATE'], dimensions=[])
    report2 = self.FakeReport(start_date='2013-01-03', end_date='2013-01-04',
                              time_dimensions=['DATE'], dimensions=[])
    reports = [report1.generate(), report2.generate()]
    datacollator = adsense_util_data_collator.DataCollator(reports)
    resulting_report = datacollator.collate_data()
    self.assertEquals(len(resulting_report['rows']), 4)
  def test_generate_every_dimension_combination_empty(self):
    """Tests the generate_every_combination method for a simple report.

    A report is generated with one dimension with three possible values. The
    list of combinations should have length 1x3.
    """
    dimensions = [u'PLATFORM_TYPE']
    dimension_values = {u'PLATFORM_TYPE': ['Unused']}
    generatedr = [
        self.FakeReport(dimensions=dimensions,
                        dimension_values=dimension_values,
                        row_fill_factor=0).generate()]

    datacollator = adsense_util_data_collator.DataCollator(generatedr)

    # Sets can be used to compare as the combinations are unique.
    self.assertEquals(
        [x for x in datacollator._generate_every_dimension_combination()], [[]])
  def test_generate_every_dimension_combination(self):
    """Tests the generate_every_combination method for a simple report.

    A report is generated with one dimension with three possible values. The
    list of combinations should have length 1x3.
    """
    dimensions = [u'PLATFORM_TYPE']
    dimension_values = {u'PLATFORM_TYPE': [
        u'Desktop', u'High-end mobile devices', u'Tablets']}
    generatedr = [self.FakeReport(
        dimensions=dimensions, dimension_values=dimension_values).generate()]

    datacollator = adsense_util_data_collator.DataCollator(generatedr)

    # Sets can be used to compare as the combinations are unique.
    self.assertEquals(
        set([x for x in datacollator._generate_every_dimension_combination()]),
        set([(u'High-end mobile devices',), (u'Tablets',), (u'Desktop',)]))
  def test_multiple_empty_reports_with_date_filling_multiple_dimensions(self):
    """Tests an empty report with two dimensions (time and generic).

    The second dimension should be ignored as there are no dimension values.
    """
    dimensions = ['DIM1']
    dimension_values = {
        'DIM1': ['Unused', 'Unused']}
    report1 = self.FakeReport(start_date='2013-01-01',
                              end_date='2013-01-03',
                              time_dimensions=['DATE'],
                              row_fill_factor=0,
                              dimensions=dimensions,
                              dimension_values=dimension_values)
    report2 = self.FakeReport(start_date='2013-01-04',
                              end_date='2013-01-06',
                              time_dimensions=['DATE'],
                              row_fill_factor=0,
                              dimensions=dimensions,
                              dimension_values=dimension_values)
    reports = [report1.generate(), report2.generate()]
    datacollator = adsense_util_data_collator.DataCollator(reports)
    resulting_report = datacollator.collate_data()
    self.assertEquals(len(resulting_report['rows']), 6)
 def setUp(self):
   # Generate the default fake report.
   generatedr = [self.FakeReport().generate()]
   self.data_collator_default = (
       adsense_util_data_collator.DataCollator(generatedr))