Refactor meta ci-cd pipeline.
This commit is contained in:
		
							parent
							
								
									9607994c31
								
							
						
					
					
						commit
						89b90da5d2
					
				
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -8,3 +8,6 @@ gmon.out
 | 
			
		||||
*.egg-info
 | 
			
		||||
dist/
 | 
			
		||||
build/
 | 
			
		||||
**/*sqlite
 | 
			
		||||
**/.nyc_output
 | 
			
		||||
**/coverage
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								apps/cic-meta/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								apps/cic-meta/.gitignore
									
									
									
									
										vendored
									
									
								
							@ -3,3 +3,5 @@ dist
 | 
			
		||||
dist-web
 | 
			
		||||
dist-server
 | 
			
		||||
scratch
 | 
			
		||||
coverage
 | 
			
		||||
.nyc_output
 | 
			
		||||
 | 
			
		||||
@ -3,17 +3,38 @@
 | 
			
		||||
    variables:
 | 
			
		||||
        APP_NAME: cic-meta
 | 
			
		||||
        DOCKERFILE_PATH: $APP_NAME/docker/Dockerfile
 | 
			
		||||
        IMAGE_TAG: $CI_REGISTRY_IMAGE/$APP_NAME:unittest-$CI_COMMIT_SHORT_SHA
 | 
			
		||||
 | 
			
		||||
.cic_meta_changes_target:
 | 
			
		||||
    rules:
 | 
			
		||||
        - changes:
 | 
			
		||||
            - $CONTEXT/$APP_NAME/*
 | 
			
		||||
        - if: $CI_PIPELINE_SOURCE == "merge_request_event"
 | 
			
		||||
#        - changes:
 | 
			
		||||
#            - $CONTEXT/$APP_NAME/*
 | 
			
		||||
        - when: always
 | 
			
		||||
 | 
			
		||||
build-mr-cic-meta:
 | 
			
		||||
cic-meta-build-mr:
 | 
			
		||||
  stage: build
 | 
			
		||||
  extends:
 | 
			
		||||
    - .cic_meta_variables
 | 
			
		||||
    - .cic_meta_changes_target
 | 
			
		||||
  script:
 | 
			
		||||
    - mkdir -p /kaniko/.docker
 | 
			
		||||
    - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > "/kaniko/.docker/config.json"
 | 
			
		||||
    # - /kaniko/executor --context $CONTEXT --dockerfile $DOCKERFILE_PATH $KANIKO_CACHE_ARGS --destination $IMAGE_TAG
 | 
			
		||||
    - /kaniko/executor --context $CONTEXT --dockerfile $DOCKERFILE_PATH $KANIKO_CACHE_ARGS --destination $IMAGE_TAG 
 | 
			
		||||
 | 
			
		||||
test-mr-cic-meta:
 | 
			
		||||
    extends:
 | 
			
		||||
        - .cic_meta_changes_target
 | 
			
		||||
        - .py_build_merge_request
 | 
			
		||||
        - .cic_meta_variables
 | 
			
		||||
        - .cic_meta_changes_target
 | 
			
		||||
    stage: test
 | 
			
		||||
    image: $IMAGE_TAG 
 | 
			
		||||
    script:
 | 
			
		||||
        - cd /tmp/src/cic-meta
 | 
			
		||||
        - npm install --dev 
 | 
			
		||||
        - npm run test
 | 
			
		||||
        - npm run test:coverage
 | 
			
		||||
    needs: ["cic-meta-build-mr"]
 | 
			
		||||
 | 
			
		||||
build-push-cic-meta:
 | 
			
		||||
    extends:
 | 
			
		||||
 | 
			
		||||
@ -4,29 +4,28 @@ WORKDIR /tmp/src/cic-meta
 | 
			
		||||
 | 
			
		||||
RUN apk add --no-cache postgresql bash
 | 
			
		||||
 | 
			
		||||
COPY cic-meta/package.json \
 | 
			
		||||
     ./
 | 
			
		||||
 | 
			
		||||
# required to build the cic-client-meta module
 | 
			
		||||
COPY cic-meta/src/ src/
 | 
			
		||||
COPY cic-meta/tests/ tests/
 | 
			
		||||
COPY cic-meta/scripts/ scripts/
 | 
			
		||||
 | 
			
		||||
# copy the dependencies
 | 
			
		||||
COPY cic-meta/package.json .
 | 
			
		||||
COPY cic-meta/tsconfig.json . 
 | 
			
		||||
COPY cic-meta/webpack.config.js .
 | 
			
		||||
     
 | 
			
		||||
RUN npm install
 | 
			
		||||
 | 
			
		||||
# see exports_dir gpg.ini
 | 
			
		||||
COPY cic-meta/tests/ tests/
 | 
			
		||||
COPY cic-meta/tests/*.asc /root/pgp/
 | 
			
		||||
RUN alias tsc=node_modules/typescript/bin/tsc 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# copy runtime configs
 | 
			
		||||
COPY cic-meta/.config/ /usr/local/etc/cic-meta/
 | 
			
		||||
# COPY cic-meta/scripts/server/initdb/server.postgres.sql /usr/local/share/cic-meta/sql/server.sql
 | 
			
		||||
 | 
			
		||||
# db migrations
 | 
			
		||||
COPY cic-meta/docker/db.sh ./db.sh
 | 
			
		||||
RUN chmod 755 ./db.sh
 | 
			
		||||
 | 
			
		||||
#RUN alias ts-node=/tmp/src/cic-meta/node_modules/ts-node/dist/bin.js
 | 
			
		||||
#ENTRYPOINT [ "./node_modules/ts-node/dist/bin.js", "./scripts/server/server.ts" ]
 | 
			
		||||
 | 
			
		||||
RUN alias tsc=node_modules/typescript/bin/tsc 
 | 
			
		||||
COPY cic-meta/docker/start_server.sh ./start_server.sh
 | 
			
		||||
RUN chmod 755 ./start_server.sh
 | 
			
		||||
ENTRYPOINT ["sh", "./start_server.sh"]
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2362
									
								
								apps/cic-meta/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2362
									
								
								apps/cic-meta/package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -11,6 +11,7 @@
 | 
			
		||||
	"preferGlobal": true,
 | 
			
		||||
	"scripts": {
 | 
			
		||||
		"test": "mocha -r node_modules/node-localstorage/register -r ts-node/register tests/*.ts",
 | 
			
		||||
		"test:coverage": "nyc mocha tests/*.ts --timeout 3000 --check-coverage=true",
 | 
			
		||||
		"build": "node_modules/typescript/bin/tsc -d --outDir dist src/index.ts",
 | 
			
		||||
		"build-server": "tsc -d --outDir dist-server scripts/server/*.ts",
 | 
			
		||||
		"pack": "node_modules/typescript/bin/tsc -d --outDir dist && webpack",
 | 
			
		||||
@ -34,7 +35,9 @@
 | 
			
		||||
	"devDependencies": {
 | 
			
		||||
		"@types/mocha": "^8.0.3",
 | 
			
		||||
		"mocha": "^8.2.0",
 | 
			
		||||
		"nock": "^13.1.0",
 | 
			
		||||
		"node-localstorage": "^2.1.6",
 | 
			
		||||
		"nyc": "^15.1.0",
 | 
			
		||||
		"ts-node": "^9.0.0",
 | 
			
		||||
		"typescript": "^4.0.5",
 | 
			
		||||
		"webpack": "^5.4.0",
 | 
			
		||||
@ -50,5 +53,26 @@
 | 
			
		||||
	"license": "GPL-3.0-or-later",
 | 
			
		||||
	"engines": {
 | 
			
		||||
		"node": ">=14.16.1"
 | 
			
		||||
	},
 | 
			
		||||
	"nyc": {
 | 
			
		||||
		"include": [
 | 
			
		||||
			"src/**/*.ts"
 | 
			
		||||
		],
 | 
			
		||||
		"extension": [
 | 
			
		||||
			".ts"
 | 
			
		||||
		],
 | 
			
		||||
		"require": [
 | 
			
		||||
			"ts-node/register"
 | 
			
		||||
		],
 | 
			
		||||
		"reporter": [
 | 
			
		||||
			"text",
 | 
			
		||||
			"html"
 | 
			
		||||
		],
 | 
			
		||||
		"sourceMap": true,
 | 
			
		||||
		"instrument": true,
 | 
			
		||||
		"branches": ">80",
 | 
			
		||||
		"lines": ">80",
 | 
			
		||||
		"functions": ">80",
 | 
			
		||||
		"statements": ">80"
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -204,7 +204,7 @@ async function processRequest(req, res) {
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (content === undefined) {
 | 
			
		||||
			console.error('empty onctent', data);
 | 
			
		||||
			console.error('empty content', data);
 | 
			
		||||
			res.writeHead(400, {"Content-Type": "text/plain"});
 | 
			
		||||
			res.end();
 | 
			
		||||
			return;
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,7 @@ class Custom extends Syncable implements Addressable {
 | 
			
		||||
        super('', v);
 | 
			
		||||
        Custom.toKey(name).then((cid) => {
 | 
			
		||||
            this.id = cid;
 | 
			
		||||
            this.value = v;
 | 
			
		||||
            this.name = name;
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -100,13 +100,15 @@ class Meta {
 | 
			
		||||
            identifier = await User.toKey(name);
 | 
			
		||||
        } else if (type === 'phone') {
 | 
			
		||||
            identifier = await Phone.toKey(name);
 | 
			
		||||
        } else {
 | 
			
		||||
        } else if (type === 'custom') {
 | 
			
		||||
            identifier = await Custom.toKey(name);
 | 
			
		||||
        } else {
 | 
			
		||||
            identifier = await Custom.toKey(name, type);
 | 
			
		||||
        }
 | 
			
		||||
        return identifier;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private wrap(syncable: Syncable): Promise<Envelope> {
 | 
			
		||||
    wrap(syncable: Syncable): Promise<Envelope> {
 | 
			
		||||
        return new Promise<Envelope>(async (resolve, reject) => {
 | 
			
		||||
            syncable.setSigner(this.signer);
 | 
			
		||||
            syncable.onwrap = async (env) => {
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										49
									
								
								apps/cic-meta/tests/custom.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								apps/cic-meta/tests/custom.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,49 @@
 | 
			
		||||
import * as assert from 'assert';
 | 
			
		||||
import {Custom} from "../src";
 | 
			
		||||
 | 
			
		||||
const testName = 'areas';
 | 
			
		||||
const testObject = {
 | 
			
		||||
    area: ['Nairobi', 'Mombasa', 'Kilifi']
 | 
			
		||||
}
 | 
			
		||||
const testNameKey = '8f3da0c90ba2b89ff217da96f6088cbaf987a1b58bc33c3a5e526e53cec7cfed';
 | 
			
		||||
const testIdentifier = ':cic.area'
 | 
			
		||||
const testIdentifierKey = 'da6194e6f33726546e82c328df4c120b844d6427859156518bd600765bf8b2b7';
 | 
			
		||||
 | 
			
		||||
describe('custom', () => {
 | 
			
		||||
 | 
			
		||||
    context('with predefined data', () => {
 | 
			
		||||
        it('should create a custom object', () => {
 | 
			
		||||
            const custom = new Custom(testName, testObject);
 | 
			
		||||
            setTimeout(() => {
 | 
			
		||||
                assert.strictEqual(custom.name, testName);
 | 
			
		||||
                assert.deepStrictEqual(custom.m.data, testObject);
 | 
			
		||||
                assert.strictEqual(custom.key(), testNameKey)
 | 
			
		||||
            }, 0);
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    context('without predefined data', () => {
 | 
			
		||||
        it('should create a custom object', () => {
 | 
			
		||||
            const custom = new Custom(testName);
 | 
			
		||||
            setTimeout(() => {
 | 
			
		||||
                assert.strictEqual(custom.name, testName);
 | 
			
		||||
                assert.deepStrictEqual(custom.m.data, {});
 | 
			
		||||
                assert.strictEqual(custom.key(), testNameKey)
 | 
			
		||||
            }, 0);
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    describe('#toKey()', () => {
 | 
			
		||||
        context('without a custom identifier', () => {
 | 
			
		||||
            it('should generate a key from the custom name', async () => {
 | 
			
		||||
                assert.strictEqual(await Custom.toKey(testName), testNameKey);
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        context('with a custom identifier', () => {
 | 
			
		||||
            it('should generate a key from the custom name with a custom identifier', async () => {
 | 
			
		||||
                assert.strictEqual(await Custom.toKey(testName, testIdentifier), testIdentifierKey);
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										176
									
								
								apps/cic-meta/tests/meta.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										176
									
								
								apps/cic-meta/tests/meta.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,176 @@
 | 
			
		||||
import * as assert from 'assert';
 | 
			
		||||
import * as fs from 'fs';
 | 
			
		||||
const nock = require('nock');
 | 
			
		||||
import {Meta} from "../src";
 | 
			
		||||
import {getResponse, metaData, networkErrorResponse, notFoundResponse, putResponse} from "./response";
 | 
			
		||||
import {Syncable} from "@cicnet/crdt-meta";
 | 
			
		||||
 | 
			
		||||
const metaUrl = 'https://meta.dev.grassrootseconomics.net';
 | 
			
		||||
const testAddress = '0xc1912fee45d61c87cc5ea59dae31190fffff232d';
 | 
			
		||||
const testAddressKey = 'a51472cb4df63b199a4de01335b1b4d1bbee27ff4f03340aa1d592f26c6acfe2';
 | 
			
		||||
const testPhone = '+254123456789';
 | 
			
		||||
const testPhoneKey = 'be3cc8212b7eb57c6217ddd42230bd8ccd2f01382bf8c1c77d3a683fa5a9bb16';
 | 
			
		||||
const testName = 'areas'
 | 
			
		||||
const testNameKey = '8f3da0c90ba2b89ff217da96f6088cbaf987a1b58bc33c3a5e526e53cec7cfed';
 | 
			
		||||
const testIdentifier = ':cic.area'
 | 
			
		||||
const testIdentifierKey = 'da6194e6f33726546e82c328df4c120b844d6427859156518bd600765bf8b2b7';
 | 
			
		||||
 | 
			
		||||
function readFile(filename) {
 | 
			
		||||
    if(!fs.existsSync(filename)) {
 | 
			
		||||
        console.error(`File ${filename} not found`);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    return fs.readFileSync(filename, {encoding: 'utf8', flag: 'r'});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const privateKey = readFile('./privatekeys.asc');
 | 
			
		||||
 | 
			
		||||
describe('meta', () => {
 | 
			
		||||
    beforeEach(() => {
 | 
			
		||||
        nock(metaUrl)
 | 
			
		||||
            .get(`/${testAddressKey}`)
 | 
			
		||||
            .reply(200, getResponse);
 | 
			
		||||
 | 
			
		||||
        nock(metaUrl)
 | 
			
		||||
            .get(`/${testPhoneKey}`)
 | 
			
		||||
            .reply(200, getResponse);
 | 
			
		||||
 | 
			
		||||
        nock(metaUrl)
 | 
			
		||||
            .get(`/${testAddress}`)
 | 
			
		||||
            .reply(404);
 | 
			
		||||
 | 
			
		||||
        nock(metaUrl)
 | 
			
		||||
            .get(`/${testIdentifier}`)
 | 
			
		||||
            .replyWithError(networkErrorResponse);
 | 
			
		||||
 | 
			
		||||
        nock(metaUrl)
 | 
			
		||||
            .put(`/${testAddressKey}`)
 | 
			
		||||
            .reply(200, putResponse);
 | 
			
		||||
 | 
			
		||||
        nock(metaUrl)
 | 
			
		||||
            .put(`/${testAddress}`)
 | 
			
		||||
            .reply(404);
 | 
			
		||||
 | 
			
		||||
        nock(metaUrl)
 | 
			
		||||
            .post('/post')
 | 
			
		||||
            .reply(500);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    describe('#get()', () => {
 | 
			
		||||
        it('should fetch data from the meta service', async () => {
 | 
			
		||||
            const account = await Meta.get(testAddressKey, metaUrl);
 | 
			
		||||
            assert.strictEqual(account.toJSON(account), getResponse.payload);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        context('if item is not found', () => {
 | 
			
		||||
            it('should respond with an error', async () => {
 | 
			
		||||
                const account = await Meta.get(testAddress, metaUrl);
 | 
			
		||||
                assert.strictEqual(account, `404: Not Found`);
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        context('in case of network error', () => {
 | 
			
		||||
            it('should respond with an error', async () => {
 | 
			
		||||
                const account = await Meta.get(testIdentifier, metaUrl);
 | 
			
		||||
                assert.strictEqual(account, `Request to ${metaUrl}/${testIdentifier} failed. Connection error.`);
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    describe('#set()', () => {
 | 
			
		||||
        context('object data', () => {
 | 
			
		||||
            it('should set data to the meta server', () => {
 | 
			
		||||
                const meta = new Meta(metaUrl, privateKey);
 | 
			
		||||
                meta.onload = async (status) => {
 | 
			
		||||
                    const response = await meta.set(testAddressKey, metaData);
 | 
			
		||||
                    assert.strictEqual(response, `${putResponse.status}: ${putResponse.statusText}`);
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        context('string data', () => {
 | 
			
		||||
            it('should set data to the meta server', () => {
 | 
			
		||||
                const meta = new Meta(metaUrl, privateKey);
 | 
			
		||||
                meta.onload = async (status) => {
 | 
			
		||||
                    const response = await meta.set(testPhoneKey, testAddress);
 | 
			
		||||
                    assert.strictEqual(response, `${putResponse.status}: ${putResponse.statusText}`);
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        context('in case of network error', () => {
 | 
			
		||||
            it('should respond with an error', () => {
 | 
			
		||||
                const meta = new Meta(metaUrl, privateKey);
 | 
			
		||||
                meta.onload = async (status) => {
 | 
			
		||||
                    const response = await meta.set(testIdentifier, metaData);
 | 
			
		||||
                    assert.strictEqual(response, `Request to ${metaUrl}/${testIdentifier} failed. Connection error.`);
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    describe('#updateMeta()', () => {
 | 
			
		||||
        it('should update data in the meta server', async () => {
 | 
			
		||||
            const syncable = new Syncable(testAddressKey, metaData);
 | 
			
		||||
            const meta = new Meta(metaUrl, privateKey);
 | 
			
		||||
            meta.onload = async (status) => {
 | 
			
		||||
                const response = await meta.updateMeta(syncable, testAddressKey);
 | 
			
		||||
                assert.strictEqual(response, putResponse);
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        context('if item is not found', () => {
 | 
			
		||||
            it('should respond with an error', () => {
 | 
			
		||||
                const syncable = new Syncable(testAddress, metaData);
 | 
			
		||||
                const meta = new Meta(metaUrl, privateKey);
 | 
			
		||||
                meta.onload = async (status) => {
 | 
			
		||||
                    const response = await meta.updateMeta(syncable, testAddress);
 | 
			
		||||
                    assert.strictEqual(response, notFoundResponse);
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    describe('#wrap()', () => {
 | 
			
		||||
        it('should sign a syncable object', function () {
 | 
			
		||||
            const syncable = new Syncable(testAddressKey, metaData);
 | 
			
		||||
            const meta = new Meta(metaUrl, privateKey);
 | 
			
		||||
            meta.onload = async (status) => {
 | 
			
		||||
                const response = await meta.wrap(syncable);
 | 
			
		||||
                assert.strictEqual(response.toJSON(), getResponse);
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    describe('#getIdentifier()', () => {
 | 
			
		||||
        context('without type', () => {
 | 
			
		||||
            it('should return an identifier', async () => {
 | 
			
		||||
                assert.strictEqual(await Meta.getIdentifier(testName), testNameKey);
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        context('with user type', () => {
 | 
			
		||||
            it('should return an identifier', async () => {
 | 
			
		||||
                assert.strictEqual(await Meta.getIdentifier(testAddress, 'user'), testAddressKey);
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        context('with phone type', () => {
 | 
			
		||||
            it('should return an identifier', async () => {
 | 
			
		||||
                assert.strictEqual(await Meta.getIdentifier(testPhone, 'phone'), testPhoneKey);
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        context('with custom type', () => {
 | 
			
		||||
            it('should return an identifier', async () => {
 | 
			
		||||
                assert.strictEqual(await Meta.getIdentifier(testName, 'custom'), testNameKey);
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        context('with unrecognised type', () => {
 | 
			
		||||
            it('should return an identifier', async () => {
 | 
			
		||||
                assert.strictEqual(await Meta.getIdentifier(testName, testIdentifier), testIdentifierKey);
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										24
									
								
								apps/cic-meta/tests/phone.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								apps/cic-meta/tests/phone.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,24 @@
 | 
			
		||||
import * as assert from 'assert';
 | 
			
		||||
import {Phone} from "../src";
 | 
			
		||||
 | 
			
		||||
const testAddress = '0xc1912fee45d61c87cc5ea59dae31190fffff232d';
 | 
			
		||||
const testPhone = '+254123456789';
 | 
			
		||||
const testPhoneKey = 'be3cc8212b7eb57c6217ddd42230bd8ccd2f01382bf8c1c77d3a683fa5a9bb16';
 | 
			
		||||
 | 
			
		||||
describe('phone', () => {
 | 
			
		||||
 | 
			
		||||
    it('should create a phone object', () => {
 | 
			
		||||
        const phone = new Phone(testAddress, testPhone);
 | 
			
		||||
        setTimeout(() => {
 | 
			
		||||
            assert.strictEqual(phone.address, testAddress);
 | 
			
		||||
            assert.strictEqual(phone.m.data.msisdn, testPhone);
 | 
			
		||||
            assert.strictEqual(phone.key(), testPhoneKey)
 | 
			
		||||
        }, 0);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    describe('#toKey()', () => {
 | 
			
		||||
        it('should generate a key from the phone number', async () => {
 | 
			
		||||
            assert.strictEqual(await Phone.toKey(testPhone), testPhoneKey);
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										79
									
								
								apps/cic-meta/tests/response.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								apps/cic-meta/tests/response.ts
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										54
									
								
								apps/cic-meta/tests/user.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								apps/cic-meta/tests/user.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,54 @@
 | 
			
		||||
import * as assert from 'assert';
 | 
			
		||||
 | 
			
		||||
import { User } from "../src";
 | 
			
		||||
 | 
			
		||||
const testAddress = '0xc1912fee45d61c87cc5ea59dae31190fffff232d';
 | 
			
		||||
const testAddressKey = 'a51472cb4df63b199a4de01335b1b4d1bbee27ff4f03340aa1d592f26c6acfe2';
 | 
			
		||||
const testUser = {
 | 
			
		||||
    user: {
 | 
			
		||||
        firstName: 'Test',
 | 
			
		||||
        lastName: 'User'
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
describe('user', () => {
 | 
			
		||||
 | 
			
		||||
    context('without predefined data', () => {
 | 
			
		||||
        it('should create a user object', () => {
 | 
			
		||||
            const user = new User(testAddress);
 | 
			
		||||
            setTimeout(() => {
 | 
			
		||||
                assert.strictEqual(user.address, testAddress);
 | 
			
		||||
                assert.strictEqual(user.key(), testAddressKey);
 | 
			
		||||
                assert.strictEqual(user.m.data.user.firstName, '');
 | 
			
		||||
                assert.strictEqual(user.m.data.user.lastName, '');
 | 
			
		||||
            }, 0);
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    context('with predefined data', () => {
 | 
			
		||||
        it('should create a user object', () => {
 | 
			
		||||
            const user = new User(testAddress, testUser);
 | 
			
		||||
            setTimeout(() => {
 | 
			
		||||
                assert.strictEqual(user.address, testAddress);
 | 
			
		||||
                assert.strictEqual(user.key(), testAddressKey);
 | 
			
		||||
                assert.strictEqual(user.m.data.user.firstName, testUser.user.firstName);
 | 
			
		||||
                assert.strictEqual(user.m.data.user.lastName, testUser.user.lastName);
 | 
			
		||||
            }, 0);
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    describe('#setName()', () => {
 | 
			
		||||
        it('should set user\'s names to metadata', () => {
 | 
			
		||||
            const user = new User(testAddress);
 | 
			
		||||
            user.setName(testUser.user.firstName, testUser.user.lastName);
 | 
			
		||||
            assert.strictEqual(user.m.data.user.firstName, testUser.user.firstName);
 | 
			
		||||
            assert.strictEqual(user.m.data.user.lastName, testUser.user.lastName);
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    describe('#toKey()', () => {
 | 
			
		||||
        it('should generate a key from the user\'s address', async () => {
 | 
			
		||||
            assert.strictEqual(await User.toKey(testAddress), testAddressKey);
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
@ -2,7 +2,7 @@
 | 
			
		||||
  "compilerOptions": {
 | 
			
		||||
    "baseUrl": ".",
 | 
			
		||||
    "outDir": "./dist.browser",
 | 
			
		||||
    "target": "es5",
 | 
			
		||||
    "target": "es2015",
 | 
			
		||||
    "module": "commonjs",
 | 
			
		||||
    "moduleResolution": "node",
 | 
			
		||||
    "lib": ["es2016", "dom", "es5"],
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user