/** * Tests iteration over various date intervals. */ public function testIteration() { $q = new DateRangeGaDataQuery(); $q->setSummaryStartDate('2012-01-01'); $q->setSummaryEndDate('2012-04-30'); $q->setIterationInterval(new \DateInterval('P1M')); $profile = new ProfileSummary(); $profile->setID('789'); $profile->setName('Foo'); $q->setProfile($profile); $q->setMetrics(array('foo', 'bar')); $sort = new GaDataSortOrder(); $sort->addField('foo'); $sort->addField('bar', SORT_DESC); $q->setSort($sort); $segment = new GaDataSegment(new GaDataSegmentConditionGroup(new GaDataSegmentSimpleCondition('foo', GaDataSegmentSimpleCondition::OP_LT, 20)), GaDataSegment::SCOPE_USERS); $q->setSegment($segment); $expected = array(); $expectedInstance = array('start-date' => '2012-01-01', 'end-date' => '2012-01-31', 'ids' => 'ga:789', 'metrics' => 'ga:foo,ga:bar', 'start-index' => 1, 'max-results' => GOOGLE_ANALYTICS_API_PAGE_SIZE, 'sort' => (string) $sort, 'segment' => (string) $segment); $expected[] = $expectedInstance; $expectedInstance['start-date'] = '2012-02-01'; $expectedInstance['end-date'] = '2012-02-29'; $expected[] = $expectedInstance; $expectedInstance['start-date'] = '2012-03-01'; $expectedInstance['end-date'] = '2012-03-31'; $expected[] = $expectedInstance; $expectedInstance['start-date'] = '2012-04-01'; $expectedInstance['end-date'] = '2012-04-30'; $expected[] = $expectedInstance; $result = array(); do { $result[] = $q->getAsArray(); } while ($q->iterate()); $this->assertEquals($expected, $result); /* If the end date falls in the middle of an interval, the interval should be shortened. */ $q->setSummaryStartDate('2015-05-03'); $q->setSummaryEndDate('2015-05-20'); $q->setIterationInterval(new \DateInterval('P1W')); $expected = array(); $expectedInstance['start-date'] = '2015-05-03'; $expectedInstance['end-date'] = '2015-05-09'; $expected[] = $expectedInstance; $expectedInstance['start-date'] = '2015-05-10'; $expectedInstance['end-date'] = '2015-05-16'; $expected[] = $expectedInstance; $expectedInstance['start-date'] = '2015-05-17'; $expectedInstance['end-date'] = '2015-05-20'; $expected[] = $expectedInstance; $result = array(); do { $result[] = $q->getAsArray(); } while ($q->iterate()); $this->assertEquals($expected, $result); }