summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@codeispoetry.ru>2017-02-14 10:54:45 +0000
committerAndrej Mihajlov <and@codeispoetry.ru>2017-02-14 10:54:45 +0000
commite79042f606ca9c2850cf57f533a98049990df19e (patch)
tree56c8871a8ca2496425f8bcac5fc74dcf6985f886
parentd0ddbfcfed224f97048bd615a91f7fd607b644a8 (diff)
downloadmullvadvpn-e79042f606ca9c2850cf57f533a98049990df19e.tar.xz
mullvadvpn-e79042f606ca9c2850cf57f533a98049990df19e.zip
Add enum.isValid
-rw-r--r--app/lib/enum.js9
-rw-r--r--test/lib/enum.spec.js8
2 files changed, 15 insertions, 2 deletions
diff --git a/app/lib/enum.js b/app/lib/enum.js
index 4359c3bfb3..c2042c07fa 100644
--- a/app/lib/enum.js
+++ b/app/lib/enum.js
@@ -2,15 +2,20 @@
* Creates enum object with keys provided as arguments
*/
export default function Enum() {
- let object = {};
+ let object = Object.create({});
+ const keys = [...arguments];
- for(const key of arguments) {
+ for(const key of keys) {
Object.defineProperty(object, key, {
enumerable: true,
value: key,
writable: false
});
}
+
+ Object.defineProperty(object, 'isValid', {
+ value: (e) => keys.includes(e)
+ });
Object.freeze(object);
diff --git a/test/lib/enum.spec.js b/test/lib/enum.spec.js
index 04e1015f42..0f5d6ee4d1 100644
--- a/test/lib/enum.spec.js
+++ b/test/lib/enum.spec.js
@@ -13,4 +13,12 @@ describe('enum', () => {
expect(() => e.ANYWHERE = 'ANYWHERE').to.throw();
});
+ it('should be able to validate enum keys', () => {
+ let e = Enum('NORTH', 'SOUTH', 'WEST', 'EAST');
+ expect(e.isValid('SOUTH')).to.be.true;
+ expect(e.isValid('ANYWHERE')).to.be.false;
+ expect(e.isValid()).to.be.false;
+ expect(e.isValid(null)).to.be.false;
+ })
+
});