describe("rails-method extension", function() { beforeEach(function () { this.server = makeServer(); clearWorkArea(); htmx.defineExtension('rails-method', { onEvent : function(name, evt) { if(name === "configRequest.htmx"){ var methodOverride = evt.detail.headers['X-HTTP-Method-Override']; if(methodOverride){ evt.detail.parameters['_method'] = methodOverride; } } } }); }); afterEach(function () { this.server.restore(); clearWorkArea(); htmx.removeExtension('rails-method'); }); it('Does not affect a GET request', function () { this.server.respondWith("GET", "/test", function (xhr) { xhr.respond(200, {}, xhr.url) }); var btn = make('') btn.click(); this.server.respond(); btn.innerHTML.should.equal("/test"); }); it('Does not affect a POST request', function () { this.server.respondWith("POST", "/test", function (xhr) { xhr.respond(200, {}, parseParams(xhr.requestBody)['_method']); }); var btn = make('') btn.click(); this.server.respond(); btn.innerHTML.should.equal(""); }); it('Adds proper _method param to PUT request', function () { this.server.respondWith("PUT", "/test", function (xhr) { xhr.respond(200, {}, parseParams(xhr.requestBody)['_method']); }); var btn = make('') btn.click(); this.server.respond(); btn.innerHTML.should.equal("PUT"); }); it('Adds proper _method param to PATCH request', function () { this.server.respondWith("PATCH", "/test", function (xhr) { xhr.respond(200, {}, parseParams(xhr.requestBody)['_method']); }); var btn = make('') btn.click(); this.server.respond(); btn.innerHTML.should.equal("PATCH"); }); it('Adds proper _method param to DELETE request', function () { this.server.respondWith("DELETE", "/test", function (xhr) { xhr.respond(200, {}, parseParams(xhr.requestBody)['_method']); }); var btn = make('') btn.click(); this.server.respond(); btn.innerHTML.should.equal("DELETE"); }); });