anchor.diff:          when(mockGoogleApiDart
                   .request(argThat(isReportingDownloadRequestWith(downloadLink))))
               .thenAnswer((_) => reportCompleter.future);
  -
  -        expectedInput = [
  +      });
  +
  +      tearDown(() => clearInteractions(mockGoogleApiDart));
  +
  +      test('no advertiser id and no media plan id disables the populate button',
  +          () async {
  +        await queryComponentPO.clickPopulate();
  +        verifyNever(mockGoogleApiDart.request(any));
  +      });
  +
  +      test('no advertiser id disables the populate button', () async {
  +        await queryComponentAccordionPO.typeMediaPlanId(mediaPlanId1);
  +        await queryComponentPO.clickPopulate();
  +        verifyNever(mockGoogleApiDart.request(any));
  +      });
  +
  +      test('non-integer advertiser id disables the populate button', () async {
  +        await queryComponentAccordionPO.typeAdvertiserId('wrong-format-id');
  +        await queryComponentAccordionPO.typeMediaPlanId(mediaPlanId1);
  +        await queryComponentPO.clickPopulate();
  +        verifyNever(mockGoogleApiDart.request(any));
  +      });
  +
  +      test('no media plan id disables the populate button', () async {
  +        await queryComponentAccordionPO.typeAdvertiserId(advertiserId);
  +        await queryComponentPO.clickPopulate();
  +        verifyNever(mockGoogleApiDart.request(any));
  +      });
  +
  +      test('non-integer media plan id disables the populate button', () async {
  +        await queryComponentAccordionPO.typeAdvertiserId(advertiserId);
  +        await queryComponentAccordionPO.typeMediaPlanId('wrong-format-id');
  +        await queryComponentPO.clickPopulate();
  +        verifyNever(mockGoogleApiDart.request(any));
  +      });
  +
  +      test('valid ids invokes populate() with correct IOs', () async {
  +        await queryComponentAccordionPO.typeAdvertiserId(advertiserId);
  +        await queryComponentAccordionPO.typeMediaPlanId(mediaPlanId1);
  +        await queryComponentPO.clickPopulate();
  +
  +        await fixture
  +            .update((_) => reportCompleter.complete(generateReport(report2)));
  +        final expectedInput = [
             generateInsertionOrder(
                 advertiserId, mediaPlanId1, ioId1, startDate, endDate, spending1),
             generateInsertionOrder(
  
positive.code:         await queryComponentAccordionPO.typeInsertionOrderId(ioId1);
          await queryComponentPO.clickPopulate();
  
          // waits for the last operation execReportingDownload() to finish.
          await fixture
              .update((_) => reportCompleter.complete(generateReport(report1)));
          verify(mockExcelDart.populate(any, false));
  
negative.code:         await queryComponentPO.selectUnderpacing();
          await queryComponentPO.clickPopulate();
  
          await fixture
              .update((_) => reportCompleter.complete(generateReport(report1)));
          verify(mockExcelDart.populate(any, true));
  