/** Verify the following when {@link DiskResourceQueryForm#searchButton} is clicked;<br> */
  @Test
  public void testOnSearchBtnSelected_withErrors() {
    DiskResourceQueryForm spy = spy(form);
    spy.onSearchButtonSelect();

    // Verify no events are fired
    verify(spy, never()).fireEvent(any(GwtEvent.class));

    // Verify that the form is not hidden
    verify(spy, never()).hide();
  }
  /** Verify the following when {@link DiskResourceQueryForm#createFilterLink} is selected;<br> */
  @Test
  public void testOnCreateQueryTemplateClicked_withErrors() {
    form.onCreateQueryTemplateClicked(mock(ClickEvent.class));

    // Verify that name prompt is not shown
    verify(namePrompt, never())
        .show(any(DiskResourceQueryTemplate.class), any(Element.class), any(AnchorAlignment.class));
  }
  @Before
  public void setUp() {
    when(tagsViewPresenterMock.getView()).thenReturn(tagsViewMock);
    GwtMockito.useProviderForType(
        SimpleBeanEditorDriver.class, new FakeSimpleBeanEditorDriverProvider(true));
    form =
        new DiskResourceQueryForm(tagsViewPresenterMock, mockedTemplate) {

          @Override
          DateInterval createDateInterval(Date from, Date to, String label) {
            DateInterval ret = mock(DateInterval.class);
            ret.setFrom(from);
            ret.setTo(to);
            ret.setLabel(label);
            return ret;
          }

          @Override
          List<FileSizeUnit> createFileSizeUnits() {
            return Lists.newArrayList();
          }

          @Override
          void addTrashAndFilter() {
            VerticalPanel vp = mock(VerticalPanel.class);
            vp.add(includeTrashItems);
            vp.add(createFilterLink);
            vp.setSpacing(5);
          }

          @Override
          void initSearchButton() {
            searchButton = mock(TextButton.class);
            searchButton.addSelectHandler(
                new SelectHandler() {

                  @Override
                  public void onSelect(SelectEvent event) {
                    onSearchButtonSelect();
                  }
                });
            Label betaLbl = mock(Label.class);
            HorizontalPanel hp = new HorizontalPanel();
            hp.add(searchButton);
            hp.add(betaLbl);
            hp.setSpacing(2);
          }

          @Override
          void initSizeFilterFields() {
            HorizontalPanel hp1 = mock(HorizontalPanel.class);
            hp1.add(fileSizeGreaterThan);
            hp1.add(greaterThanComboBox);
            hp1.setSpacing(3);

            HorizontalPanel hp2 = new HorizontalPanel();
            hp2.add(fileSizeLessThan);
            hp2.add(lessThanComboBox);
            hp2.setSpacing(3);
          }

          @Override
          void initCreateFilter() {
            createFilterLink = mock(IPlantAnchor.class);
            createFilterLink.addClickHandler(
                new ClickHandler() {

                  @Override
                  public void onClick(ClickEvent event) {
                    // Flush to perform local validations
                    DiskResourceQueryTemplate flushedFilter = editorDriver.flush();
                    if (editorDriver.hasErrors()) {
                      return;
                    }
                    showNamePrompt(flushedFilter);
                  }
                });
          }

          @Override
          void initExcludeTrashField() {
            includeTrashItems = mock(CheckBox.class);
            includeTrashItems.setBoxLabel("Include items in Trash");
          }

          @Override
          void initFileQuery() {
            fileQuery = mock(TextField.class);
            fileQuery.setWidth(cw);
            fileQuery.setEmptyText("Enter values...");
          }

          @Override
          void initNegatedFileQuery() {
            negatedFileQuery = mock(TextField.class);
            negatedFileQuery.setEmptyText("Enter values...");
            negatedFileQuery.setWidth(cw);
          }

          @Override
          void initMetadataSearchFields() {
            metadataAttributeQuery = mock(TextField.class);
            metadataAttributeQuery.setEmptyText("Enter values...");
            metadataAttributeQuery.setWidth(cw);

            metadataValueQuery = mock(TextField.class);
            metadataValueQuery.setEmptyText("Enter values...");
            metadataValueQuery.setWidth(cw);
          }

          @Override
          void initOwnerSharedSearchField() {
            ownedBy = mock(TextField.class);
            ownedBy.setEmptyText("Enter iPlant user name");
            ownedBy.setWidth(cw);

            sharedWith = mock(TextField.class);
            sharedWith.setEmptyText("Enter iPlant user name");
            sharedWith.setWidth(cw);
          }

          @Override
          void initDateRangeCombos() {
            List<DateInterval> timeIntervals = Lists.newArrayList();

            DateInterval interval = createDateInterval(null, null, "---");
            timeIntervals.add(interval);

            // Data range combos
            LabelProvider<DateInterval> dateIntervalLabelProvider =
                new LabelProvider<DateInterval>() {

                  @Override
                  public String getLabel(DateInterval item) {
                    return item.getLabel();
                  }
                };
            createdWithinCombo = new SimpleComboBox<>(dateIntervalLabelProvider);
            modifiedWithinCombo = new SimpleComboBox<>(dateIntervalLabelProvider);
            createdWithinCombo.add(timeIntervals);
            modifiedWithinCombo.add(timeIntervals);

            createdWithinCombo.setEmptyText("---");
            modifiedWithinCombo.setEmptyText("---");

            createdWithinCombo.setWidth(cw);
            modifiedWithinCombo.setWidth(cw);
          }

          @Override
          void initTagField() {
            final TagSearchFieldImpl tagSearchField = mock(TagSearchFieldImpl.class);

            tagSearchField.addValueChangeHandler(
                new ValueChangeHandler<Tag>() {

                  @Override
                  public void onValueChange(ValueChangeEvent<Tag> event) {
                    tagSearchField.clear();
                    tagSearchField.asWidget().getElement().focus();
                  }
                });
          }
        };
    form.namePrompt = namePrompt;
  }