Partial check() method impl for binary 0.2
Signed-off-by: Fabio José <fabiojose@gmail.com>
This commit is contained in:
		
							parent
							
								
									1fed22fa93
								
							
						
					
					
						commit
						141cb04516
					
				| 
						 | 
				
			
			@ -13,6 +13,26 @@ const Headers02 = {
 | 
			
		|||
  EXTENSIONS_PREFIX : "ce-"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const required_attributes = [];
 | 
			
		||||
required_attributes.push(Headers02.TYPE);
 | 
			
		||||
required_attributes.push(Headers02.SPEC_VERSION);
 | 
			
		||||
required_attributes.push(Headers02.SOURCE);
 | 
			
		||||
required_attributes.push(Headers02.ID);
 | 
			
		||||
 | 
			
		||||
function validate_args(payload, attributes) {
 | 
			
		||||
  if(!payload){
 | 
			
		||||
    throw {message: "payload is null or undefined"};
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if(!attributes) {
 | 
			
		||||
    throw {message: "attributes is null or undefined"};
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if((typeof payload) !== "object"){
 | 
			
		||||
    throw {message: "payload must be an object", erros: [typeof payload]};
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function HTTPBinary02(configuration){
 | 
			
		||||
  this.config = configuration;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -25,6 +45,20 @@ function HTTPBinary02(configuration){
 | 
			
		|||
      Constants.MIME_CE_JSON + "; charset=" + Constants.CHARSET_DEFAULT;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
HTTPBinary02.prototype.check = function(payload, attributes) {
 | 
			
		||||
  // Validation Level 0
 | 
			
		||||
  validate_args(payload, attributes);
 | 
			
		||||
 | 
			
		||||
  // Validation Level 1
 | 
			
		||||
  for(i in required_attributes){
 | 
			
		||||
    if(!attributes[required_attributes[i]]){
 | 
			
		||||
      throw {message: "header '" + required_attributes[i] + "' not found"};
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
HTTPBinary02.prototype.emit = function(cloudevent){
 | 
			
		||||
 | 
			
		||||
  // Create new request object
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,6 +7,8 @@ var http = require("http");
 | 
			
		|||
var request = require("request");
 | 
			
		||||
var Spec02 = require("../lib/specs/spec_0_2.js");
 | 
			
		||||
 | 
			
		||||
var {HTTPBinary02} = require("../lib/bindings/http/emitter_binary_0_2.js");
 | 
			
		||||
 | 
			
		||||
const type        = "com.github.pull.create";
 | 
			
		||||
const source      = "urn:event:from:myapi/resourse/123";
 | 
			
		||||
const webhook     = "https://cloudevents.io/webhook";
 | 
			
		||||
| 
						 | 
				
			
			@ -175,6 +177,95 @@ describe("HTTP Transport Binding - Version 0.2", () => {
 | 
			
		|||
  });
 | 
			
		||||
 | 
			
		||||
  describe("Binary", () => {
 | 
			
		||||
    describe("Check", () => {
 | 
			
		||||
      it("Throw error when payload arg is null or undefined", () => {
 | 
			
		||||
        // setup
 | 
			
		||||
        var payload = null;
 | 
			
		||||
        var attributes = {};
 | 
			
		||||
 | 
			
		||||
        // act and assert
 | 
			
		||||
        expect(httpbinary02.check.bind(httpbinary02, payload, attributes))
 | 
			
		||||
          .to.throw("payload is null or undefined");
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      it("Throw error when attributes arg is null or undefined", () => {
 | 
			
		||||
        // setup
 | 
			
		||||
        var payload = {};
 | 
			
		||||
        var attributes = null;
 | 
			
		||||
 | 
			
		||||
        // act and assert
 | 
			
		||||
        expect(httpbinary02.check.bind(httpbinary02, payload, attributes))
 | 
			
		||||
          .to.throw("attributes is null or undefined");
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      it("Throw error when payload is not an object", () => {
 | 
			
		||||
        // setup
 | 
			
		||||
        var payload = "wow";
 | 
			
		||||
        var attributes = {};
 | 
			
		||||
 | 
			
		||||
        // act and assert
 | 
			
		||||
        expect(httpbinary02.check.bind(httpbinary02, payload, attributes))
 | 
			
		||||
          .to.throw("payload must be an object");
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      it("Throw error when headers has no 'ce-type'", () => {
 | 
			
		||||
        // setup
 | 
			
		||||
        var payload = {};
 | 
			
		||||
        var attributes = {
 | 
			
		||||
          //"ce-type"        : "type",
 | 
			
		||||
          "ce-specversion" : "specversion",
 | 
			
		||||
          "ce-source"      : "source",
 | 
			
		||||
          "ce-id"          : "id"
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        // act and assert
 | 
			
		||||
        expect(httpbinary02.check.bind(httpbinary02, payload, attributes))
 | 
			
		||||
          .to.throw("header 'ce-type' not found");
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      it("Throw error when headers has no 'ce-specversion'", () => {
 | 
			
		||||
        // setup
 | 
			
		||||
        var payload = {};
 | 
			
		||||
        var attributes = {
 | 
			
		||||
          "ce-type"        : "type",
 | 
			
		||||
          "ce-source"      : "source",
 | 
			
		||||
          "ce-id"          : "id"
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        // act and assert
 | 
			
		||||
        expect(httpbinary02.check.bind(httpbinary02, payload, attributes))
 | 
			
		||||
          .to.throw("header 'ce-specversion' not found");
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      it("Throw error when headers has no 'ce-source'", () => {
 | 
			
		||||
        // setup
 | 
			
		||||
        var payload = {};
 | 
			
		||||
        var attributes = {
 | 
			
		||||
          "ce-type"        : "type",
 | 
			
		||||
          "ce-specversion" : "specversion",
 | 
			
		||||
          "ce-id"          : "id"
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        // act and assert
 | 
			
		||||
        expect(httpbinary02.check.bind(httpbinary02, payload, attributes))
 | 
			
		||||
          .to.throw("header 'ce-source' not found");
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      it("Throw error when headers has no 'ce-id'", () => {
 | 
			
		||||
        // setup
 | 
			
		||||
        var payload = {};
 | 
			
		||||
        var attributes = {
 | 
			
		||||
          "ce-type"        : "type",
 | 
			
		||||
          "ce-specversion" : "specversion",
 | 
			
		||||
          "ce-source"      : "source"
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        // act and assert
 | 
			
		||||
        expect(httpbinary02.check.bind(httpbinary02, payload, attributes))
 | 
			
		||||
          .to.throw("header 'ce-id' not found");
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    describe("JSON Format", () => {
 | 
			
		||||
      it("requires '" + cloudevent.getContenttype() + "' Content-Type in the header", () => {
 | 
			
		||||
        return httpbinary02.emit(cloudevent)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue