diff --git a/bridge/e2e/perf/httpMetric.e2e.js b/bridge/e2e/perf/httpMetric.e2e.js new file mode 100644 index 00000000..2be2debd --- /dev/null +++ b/bridge/e2e/perf/httpMetric.e2e.js @@ -0,0 +1,88 @@ +describe('perf()', () => { + describe('HttpMetric', () => { + it('start() & stop()', async () => { + const httpMetric = firebase.perf().newHttpMetric('http://foo.com', 'GET'); + await httpMetric.start(); + await httpMetric.stop(); + }); + + it('getAttribute() should return null', async () => { + const httpMetric = firebase.perf().newHttpMetric('http://foo.com', 'GET'); + await httpMetric.start(); + const value = await httpMetric.getAttribute('foo'); + should.equal(value, null); + await httpMetric.stop(); + }); + + xit('getAttribute() should return string value', async () => { + const httpMetric = firebase.perf().newHttpMetric('http://foo.com', 'GET'); + await httpMetric.start(); + await httpMetric.putAttribute('foo', 'bar'); + const value = await httpMetric.getAttribute('foo'); + should.equal(value, 'bar'); + await httpMetric.stop(); + }); + + xit('putAttribute()', async () => { + const httpMetric = firebase.perf().newHttpMetric('http://foo.com', 'GET'); + await httpMetric.start(); + await httpMetric.putAttribute('foo', 'bar'); + const value = await httpMetric.getAttribute('foo'); + value.should.equal('bar'); + await httpMetric.stop(); + }); + + xit('getAttributes()', async () => { + const httpMetric = firebase.perf().newHttpMetric('http://foo.com', 'GET'); + await httpMetric.start(); + await httpMetric.putAttribute('foo', 'bar'); + await httpMetric.putAttribute('bar', 'baz'); + const value = await httpMetric.getAttributes(); + value.should.deepEqual({ + foo: 'bar', + bar: 'baz', + }); + await httpMetric.stop(); + }); + + xit('removeAttribute()', async () => { + const httpMetric = firebase.perf().newHttpMetric('http://foo.com', 'GET'); + await httpMetric.start(); + await httpMetric.putAttribute('foobar', 'bar'); + const value = await httpMetric.getAttribute('foobar'); + value.should.equal('bar'); + await httpMetric.removeAttribute('foobar'); + const removed = await httpMetric.getAttribute('foobar'); + should.equal(removed, null); + await httpMetric.stop(); + }); + + it('setHttpResponseCode()', async () => { + const httpMetric = firebase.perf().newHttpMetric('http://foo.com', 'GET'); + await httpMetric.start(); + await httpMetric.setHttpResponseCode(500); + await httpMetric.stop(); + }); + + it('setRequestPayloadSize()', async () => { + const httpMetric = firebase.perf().newHttpMetric('http://foo.com', 'GET'); + await httpMetric.start(); + await httpMetric.setRequestPayloadSize(1234567); + await httpMetric.stop(); + }); + + it('setResponseContentType()', async () => { + const httpMetric = firebase.perf().newHttpMetric('http://foo.com', 'GET'); + await httpMetric.start(); + await httpMetric.setResponseContentType('application/foobar'); + await httpMetric.stop(); + }); + + it('setResponsePayloadSize()', async () => { + const httpMetric = firebase.perf().newHttpMetric('http://foo.com', 'GET'); + await httpMetric.start(); + await httpMetric.setResponsePayloadSize(123456789); + await httpMetric.stop(); + }); + }); +}); diff --git a/bridge/e2e/perf/perf.e2e.js b/bridge/e2e/perf/perf.e2e.js index 6d614f1d..20f0f41d 100644 --- a/bridge/e2e/perf/perf.e2e.js +++ b/bridge/e2e/perf/perf.e2e.js @@ -8,9 +8,10 @@ describe('perf()', () => { await firebase.perf().setPerformanceCollectionEnabled(false); }); - xit('errors if not boolean', async () => { - // TODO add validations to lib - await firebase.perf().setPerformanceCollectionEnabled(); + it('errors if not boolean', async () => { + (() => firebase.perf().setPerformanceCollectionEnabled()).should.throw( + 'firebase.perf().setPerformanceCollectionEnabled() requires a boolean value' + ); }); }); @@ -20,15 +21,23 @@ describe('perf()', () => { trace.constructor.name.should.be.equal('Trace'); }); - xit('errors if identifier not a string', async () => { - // TODO add validations to lib - try { - firebase.perf().newTrace([1, 2, 3, 4]); - } catch (e) { - return undefined; - } + it('errors if identifier not a string', async () => { + (() => firebase.perf().newTrace([1, 2, 3, 4])).should.throw( + 'firebase.perf().newTrace() requires a string value' + ); + }); + }); - throw new Error('Trace did not error on invalid identifier'); + describe('newHttpMetric()', () => { + it('returns an instance of HttpMetric', async () => { + const trace = firebase.perf().newHttpMetric('foo', 'bar'); + trace.constructor.name.should.be.equal('HttpMetric'); + }); + + it('errors if url/httpMethod not a string', async () => { + (() => firebase.perf().newHttpMetric(123, [1, 2])).should.throw( + 'firebase.perf().newHttpMetric() requires url and httpMethod string values' + ); }); }); }); diff --git a/bridge/e2e/perf/trace.e2e.js b/bridge/e2e/perf/trace.e2e.js index 0751dcf7..35dedfba 100644 --- a/bridge/e2e/perf/trace.e2e.js +++ b/bridge/e2e/perf/trace.e2e.js @@ -1,28 +1,88 @@ describe('perf()', () => { - describe('Trace', () => { + describe.only('Trace', () => { it('start() & stop()', async () => { const trace = firebase.perf().newTrace('bar'); await trace.start(); await trace.stop(); }); - describe('incrementCounter()', () => { - it('accepts a string event', async () => { - const trace = firebase.perf().newTrace('bar'); - await trace.start(); - await trace.incrementCounter('fooby'); - await trace.incrementCounter('fooby'); - await trace.incrementCounter('fooby'); - await trace.incrementCounter('fooby'); - await trace.stop(); - }); - - xit('errors if event is not a string', async () => { - const trace = firebase.perf().newTrace('bar'); - await trace.start(); - await trace.incrementCounter([1, 2, 3, 4]); - await trace.stop(); - }); + it('getAttribute() should return null', async () => { + const trace = firebase.perf().newTrace('bar'); + await trace.start(); + const value = await trace.getAttribute('foo'); + should.equal(value, null); + await trace.stop(); }); + + it('getAttribute() should return string value', async () => { + const trace = firebase.perf().newTrace('bar'); + await trace.start(); + await trace.putAttribute('foo', 'bar'); + const value = await trace.getAttribute('foo'); + should.equal(value, 'bar'); + await trace.stop(); + }); + + it('putAttribute()', async () => { + const trace = firebase.perf().newTrace('bar'); + await trace.start(); + await trace.putAttribute('foo', 'bar'); + const value = await trace.getAttribute('foo'); + value.shoud.equal('bar'); + await trace.stop(); + }); + + it('getAttributes()', async () => { + const trace = firebase.perf().newTrace('bar'); + await trace.start(); + await trace.putAttribute('foo', 'bar'); + await trace.putAttribute('bar', 'baz'); + const value = await trace.getAttributes(); + value.should.deepEqual({ + foo: 'bar', + bar: 'baz', + }); + await trace.stop(); + }); + + it('removeAttribute()', async () => { + const trace = firebase.perf().newTrace('bar'); + await trace.start(); + await trace.putAttribute('foobar', 'bar'); + const value = await trace.getAttribute('foobar'); + value.should.equal('bar'); + await trace.removeAttribute('foobar'); + const removed = await trace.getAttribute('foobar'); + should.equal(removed, null); + await trace.stop(); + }); + + it('getMetric()', async () => { + const trace = firebase.perf().newTrace('bar'); + await trace.start(); + const metric = await trace.getMetric('foo'); + metric.should.equal(0); + await trace.stop(); + }); + + it('putMetric()', async () => { + const trace = firebase.perf().newTrace('bar'); + await trace.start(); + await trace.putMetric('baz', 1); + const metric = await trace.getMetric('baz'); + metric.should.equal(1); + await trace.stop(); + }); + + it.only('incrementMetric()', async () => { + const trace = firebase.perf().newTrace('bar'); + await trace.start(); + await trace.putMetric('baz', 1); + await trace.incrementMetric('baz', 2); + const metric = await trace.getMetric('baz'); + metric.should.equal(3); + await trace.stop(); + }); + }); });