Package com.ibm.sbt.automation.core.test

Source Code of com.ibm.sbt.automation.core.test.BaseApiTest$JsonValidator

/*
* © Copyright IBM Corp. 2012
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package com.ibm.sbt.automation.core.test;

import java.io.File;
import java.io.FileOutputStream;
import java.util.List;

import org.junit.Before;
import org.junit.Rule;
import org.junit.rules.TestName;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;

import com.ibm.commons.util.StringUtil;
import com.ibm.commons.util.io.json.JsonException;
import com.ibm.commons.util.io.json.JsonJavaFactory;
import com.ibm.commons.util.io.json.JsonJavaObject;
import com.ibm.commons.util.io.json.JsonParser;
import com.ibm.sbt.automation.core.environment.TestEnvironment;
import com.ibm.sbt.automation.core.test.pageobjects.JavaScriptPreviewPage;
import com.ibm.sbt.automation.core.test.pageobjects.ResultPage;
import com.ibm.sbt.automation.core.utils.Trace;
import com.ibm.sbt.security.authentication.AuthenticationException;
import com.ibm.sbt.security.authentication.password.PasswordException;
import com.ibm.sbt.services.endpoints.BasicEndpoint;
import com.ibm.sbt.services.endpoints.EndpointFactory;

/**
* @author mwallace
* @date 5 Mar 2013
*/
public class BaseApiTest extends BaseTest {
 
  @Rule public TestName name = new TestName();


    private String snippetId;
   
    @Before
    public void setupTest() throws AuthenticationException {
         createContext();
         loginConnections();
    }

    /**
     * Return the endpoint name to use
     */
    public String getEndpointName() {
       return environment.getEndpointName();
    }
   
    /* (non-Javadoc)
     * @see com.ibm.sbt.automation.core.test.BaseTest#getAuthenticatedMatch()
     */
    @Override
    public String getAuthenticatedMatch() {
        return "json";
    }


   
    /**
     * @throws PasswordException
     */
    protected void loginConnections() throws AuthenticationException {
        BasicEndpoint endpoint = (BasicEndpoint)EndpointFactory.getEndpoint(getEndpointName());
        String username = null;
        String password = null;           
        if (environment.isSmartCloud()) {
            username = getProperty(TestEnvironment.PROP_OAUTH10_USERNAME);
            password = getProperty(TestEnvironment.PROP_OAUTH10_PASSWORD);           
        } else {
            username = getProperty(TestEnvironment.PROP_BASIC_USERNAME);
            password = getProperty(TestEnvironment.PROP_BASIC_PASSWORD);           
        }
        endpoint.login(username, password, true);
    }
   
    /**
     * @param snippetId
     * @return
     */
    public JavaScriptPreviewPage executeSnippet(String snippetId) {
        return executeSnippet(snippetId, 0);
    }
   
    /**
     * @param snippetId
     * @return
     */
    public JavaScriptPreviewPage executeSnippet(String snippetId, long delay) {
      this.snippetId = snippetId;
        ResultPage resultPage = launchSnippet(snippetId, authType, delay);
        JavaScriptPreviewPage previewPage = new JavaScriptPreviewPage(resultPage);
        Trace.log(previewPage.getText());
        return previewPage;
    }
   
    protected void saveTestDataAndResults() {
      String fileBase = getSnippetFile();
      File testData = getTestDataDir();
     
      WebDriver webDriver = environment.getWebDriver();
     
      WebElement jsonElement = webDriver.findElement(By.id("json"));
        String jsonText = jsonElement.getText();
        writeFile(testData, fileBase + ".result", jsonText);
       
      WebElement mockDataElement = webDriver.findElement(By.id("mockData"));
        String mockDataText = mockDataElement.getText();
        writeFile(testData, fileBase + ".mock", mockDataText);
    }
   
  protected void writeFile(File folder, String fileName, String contents) {
    try {
      if (StringUtil.isEmpty(contents)) {
        return;
      }
     
      File file = (new File(folder, fileName)).getAbsoluteFile();
      if (file.exists()) {
        if (!environment.isOverwriteTestdata()) {
          return;
        } else {
          file.delete();
        }
      }
      file.createNewFile();
      FileOutputStream fos = new FileOutputStream(file);
      fos.write(contents.getBytes());
      fos.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  protected File getTestDataDir() {
      try {
        String currentDir = System.getProperty("user.dir");
        String samplesJsBase = environment.getProperty("samples.js.base");
        String snippetPath = getSnippetPath();
        return new File(currentDir + File.separatorChar + samplesJsBase + File.separatorChar + snippetPath);
      } catch (Exception e) {
        e.printStackTrace();
        return null;
      }
    }
 
  protected String getSnippetPath() {
    int index = snippetId.indexOf("API_");
    String snippetPath = snippetId.substring(0, index+3);
    return snippetPath.replace('_', File.separatorChar);
  }

  protected String getSnippetFile() {
    int index = snippetId.indexOf("API_");
    String snippetFile = snippetId.substring(index+4);
    return snippetFile.replace('_', ' ');
  }

    protected String getTestFileBase() {
      return this.getClass().getCanonicalName() + "." + name.getMethodName();
    }
   
    /**
     * Wait the specified interval for a json list with the specified number of entries
     */
    public WebElement waitForJsonList(final int count, final int secs) {
        return waitForJsonList(count, null, secs);
    }
   
    /**
     * Wait the specified interval for a json list with the specified number of entries
     */
    public WebElement waitForJsonList(final int count, final JsonValidator jsonValidator, final int secs) {
        try {
            return (new WebDriverWait(environment.getWebDriver(), secs)).until(new ExpectedCondition<WebElement>() {
                @Override
                public WebElement apply(WebDriver webDriver) {
                    WebElement element = webDriver.findElement(By.id("json"));
                    String text = element.getText();
                    if (StringUtil.isNotEmpty(text)) {
                        try {
                            List jsonList = (List)JsonParser.fromJson(JsonJavaFactory.instanceEx, text);
                            if (jsonList.size() >= count) {
                                if (jsonValidator != null) {
                                    for (int i=0; i<jsonList.size(); i++) {
                                        Object object = jsonList.get(i);
                                        if (object instanceof JsonJavaObject) {
                                            if (!jsonValidator.isValid(i, (JsonJavaObject)object)) {
                                                return null;
                                            }
                                        }
                                    }
                                }
                                return element;
                            }
                        } catch (JsonException je) {}
                    }
                    return null;
                }
            });
        } catch (Exception e) {
            return null;
        }
    }
   
    /**
     * Interface used to check the content of a JSON object
     */
    public interface JsonValidator {
       
        /**
         * Return true if the JSON object is in valid state for test validation
         */
        boolean isValid(int index, JsonJavaObject json);
       
    }
   
}
TOP

Related Classes of com.ibm.sbt.automation.core.test.BaseApiTest$JsonValidator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.