@typetron/framework 0.5.2 → 0.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -6
- package/.eslintrc-old.js +0 -208
- package/Cache/Cache.ts +0 -13
- package/Cache/Stores/DatabaseStore.ts +0 -120
- package/Cache/Stores/FileStore.ts +0 -69
- package/Cache/Stores/MemoryStore.ts +0 -71
- package/Cache/index.ts +0 -5
- package/Cache/types.ts +0 -4
- package/Container/ClassResolver.ts +0 -106
- package/Container/Container.ts +0 -144
- package/Container/Contracts.ts +0 -3
- package/Container/Decorators.ts +0 -20
- package/Container/Metadata.ts +0 -16
- package/Container/Resolver.ts +0 -27
- package/Container/index.ts +0 -5
- package/Database/Clauses/Where.ts +0 -0
- package/Database/Connection.ts +0 -52
- package/Database/Decorators.ts +0 -142
- package/Database/Drivers/DatabaseDriver.ts +0 -37
- package/Database/Drivers/MySQL/Alter/index.ts +0 -55
- package/Database/Drivers/MySQL/ColumnDefinition.ts +0 -16
- package/Database/Drivers/MySQL/Create.ts +0 -47
- package/Database/Drivers/MySQL/MysqlDriver.ts +0 -123
- package/Database/Drivers/MySQL/Schema.ts +0 -82
- package/Database/Drivers/MySQL/index.ts +0 -13
- package/Database/Drivers/SQL/Schema.ts +0 -73
- package/Database/Drivers/SQL/Statements/Alter.ts +0 -22
- package/Database/Drivers/SQL/Statements/BaseStatement.ts +0 -55
- package/Database/Drivers/SQL/Statements/Delete.ts +0 -20
- package/Database/Drivers/SQL/Statements/Insert.ts +0 -24
- package/Database/Drivers/SQL/Statements/Select.ts +0 -55
- package/Database/Drivers/SQL/Statements/Update.ts +0 -33
- package/Database/Drivers/SQL/index.ts +0 -8
- package/Database/Drivers/SQLite/Create.ts +0 -45
- package/Database/Drivers/SQLite/Schema.ts +0 -54
- package/Database/Drivers/SQLite/SqliteDriver.ts +0 -144
- package/Database/Drivers/SQLite/index.ts +0 -15
- package/Database/Drivers/SchemaContract.ts +0 -11
- package/Database/Drivers/Statement.ts +0 -16
- package/Database/Drivers/index.ts +0 -4
- package/Database/Entity.ts +0 -377
- package/Database/EntityNotFoundError.ts +0 -5
- package/Database/EntityProxyHandler.ts +0 -43
- package/Database/EntityQuery.ts +0 -197
- package/Database/Expression.ts +0 -3
- package/Database/Fields.ts +0 -816
- package/Database/Helpers.ts +0 -12
- package/Database/List.ts +0 -71
- package/Database/Migrations/Migration.ts +0 -10
- package/Database/Migrations/MigrationHistory.ts +0 -20
- package/Database/Migrations/Migrator.ts +0 -122
- package/Database/Migrations/index.ts +0 -3
- package/Database/ORM/BaseRelationship.ts +0 -10
- package/Database/Query.ts +0 -374
- package/Database/Seeders/Seeder.ts +0 -3
- package/Database/Seeders/SeederManager.ts +0 -27
- package/Database/Seeders/index.ts +0 -2
- package/Database/StringExpression.ts +0 -9
- package/Database/Types.ts +0 -165
- package/Database/index.ts +0 -23
- package/Encryption/index.ts +0 -51
- package/Forms/Decorators.ts +0 -29
- package/Forms/Form.ts +0 -70
- package/Forms/FormFields.ts +0 -36
- package/Forms/index.ts +0 -3
- package/Framework/App.ts +0 -10
- package/Framework/Application.ts +0 -118
- package/Framework/Auth/Auth.ts +0 -122
- package/Framework/Auth/Authenticatable.ts +0 -9
- package/Framework/Auth/User.ts +0 -27
- package/Framework/Auth/index.ts +0 -29
- package/Framework/Config/AppConfig.ts +0 -25
- package/Framework/Config/AuthConfig.ts +0 -9
- package/Framework/Config/BaseConfig.ts +0 -9
- package/Framework/Config/CacheConfig.ts +0 -38
- package/Framework/Config/DatabaseConfig.ts +0 -21
- package/Framework/Config/MailConfig.ts +0 -30
- package/Framework/Config/index.ts +0 -6
- package/Framework/Middleware/AuthMiddleware.ts +0 -31
- package/Framework/Middleware/CorsMiddleware.ts +0 -32
- package/Framework/Middleware/StaticAssetsMiddleware.ts +0 -76
- package/Framework/Middleware/index.ts +0 -2
- package/Framework/Provider.ts +0 -9
- package/Framework/Providers/CacheProvider.ts +0 -28
- package/Framework/Providers/DatabaseProvider.ts +0 -36
- package/Framework/Providers/MailProvider.ts +0 -31
- package/Framework/Providers/WebsocketsProvider.ts +0 -120
- package/Framework/Resolvers/AuthResolver.ts +0 -23
- package/Framework/Resolvers/EntityResolver.ts +0 -41
- package/Framework/Resolvers/FormResolver.ts +0 -37
- package/Framework/RootDir.ts +0 -1
- package/Framework/index.ts +0 -8
- package/Frontend/Angular/index.ts +0 -24
- package/Frontend/Websockets/index.ts +0 -86
- package/Mail/MailAddress.ts +0 -4
- package/Mail/MailTransport.ts +0 -6
- package/Mail/Mailable.ts +0 -16
- package/Mail/Mailer.ts +0 -27
- package/Mail/PendingMail.ts +0 -68
- package/Mail/SentMessage.ts +0 -20
- package/Mail/Transports/MemoryTransport.ts +0 -13
- package/Mail/Transports/SendGridTransport.ts +0 -95
- package/Mail/index.ts +0 -3
- package/Models/Model.ts +0 -41
- package/Models/index.ts +0 -54
- package/Router/BaseController.ts +0 -7
- package/Router/Decorators.ts +0 -224
- package/Router/Guard.ts +0 -10
- package/Router/Http/Contracts.ts +0 -4
- package/Router/Http/ErrorHandler.ts +0 -45
- package/Router/Http/ErrorHandlerInterface.ts +0 -6
- package/Router/Http/Errors/HttpError.ts +0 -15
- package/Router/Http/Handler.ts +0 -183
- package/Router/Http/HttpRoute.ts +0 -110
- package/Router/Http/Middleware.ts +0 -7
- package/Router/Http/Request.ts +0 -225
- package/Router/Http/Response.ts +0 -35
- package/Router/Http/index.ts +0 -85
- package/Router/Metadata.ts +0 -34
- package/Router/Middleware.ts +0 -16
- package/Router/Request.ts +0 -65
- package/Router/Route.ts +0 -16
- package/Router/RouteNotFoundError.ts +0 -5
- package/Router/Router.ts +0 -35
- package/Router/Servers/index.ts +0 -6
- package/Router/Servers/node.ts +0 -49
- package/Router/Servers/uNetworking.ts +0 -151
- package/Router/Websockets/Handler.ts +0 -82
- package/Router/Websockets/Middleware.ts +0 -7
- package/Router/Websockets/Request.ts +0 -3
- package/Router/Websockets/WebsocketRoute.ts +0 -61
- package/Router/Websockets/index.ts +0 -57
- package/Router/Websockets/types.ts +0 -23
- package/Router/index.ts +0 -6
- package/Storage/File.ts +0 -30
- package/Storage/Image.ts +0 -19
- package/Storage/InvalidImage.ts +0 -3
- package/Storage/Storage.ts +0 -98
- package/Storage/index.ts +0 -4
- package/Storage/utils.ts +0 -18
- package/Support/Array.ts +0 -184
- package/Support/Math.ts +0 -12
- package/Support/Metadata.ts +0 -31
- package/Support/String.ts +0 -38
- package/Support/index.ts +0 -19
- package/Support/utils.ts +0 -7
- package/Testing/TestCase.ts +0 -193
- package/Validation/Rule.ts +0 -9
- package/Validation/RuleInterface.ts +0 -10
- package/Validation/Rules/Email.ts +0 -20
- package/Validation/Rules/FileExtension.ts +0 -21
- package/Validation/Rules/MaxLength.ts +0 -17
- package/Validation/Rules/MinLength.ts +0 -18
- package/Validation/Rules/Optional.ts +0 -18
- package/Validation/Rules/Required.ts +0 -29
- package/Validation/Validator.ts +0 -7
- package/Validation/index.ts +0 -12
- package/benchmark-index.js +0 -20
- package/benchmark.ts +0 -47
- package/tests/Cache/DatabaseStoreTest.ts +0 -110
- package/tests/Cache/FileStoreTest.ts +0 -93
- package/tests/Cache/MemoryStoreTest.ts +0 -92
- package/tests/Container/ContainerTest.ts +0 -336
- package/tests/Database/Drivers/MySQL/AlterTest.ts +0 -100
- package/tests/Database/Drivers/MySQL/CreateTest.ts +0 -39
- package/tests/Database/Drivers/MysqlDriverTest.ts +0 -140
- package/tests/Database/Drivers/SqliteDriverTest.ts +0 -126
- package/tests/Database/Entities/Article.ts +0 -21
- package/tests/Database/Entities/Profile.ts +0 -21
- package/tests/Database/Entities/Role.ts +0 -15
- package/tests/Database/Entities/User.ts +0 -35
- package/tests/Database/EntityRelationshipsTest.ts +0 -475
- package/tests/Database/EntityTest.ts +0 -202
- package/tests/Database/Migrations/RunnerTest.ts +0 -96
- package/tests/Database/Migrations/migrations/1.createUserTable.ts +0 -12
- package/tests/Database/Migrations/migrations/2.createArticlesTable.ts +0 -12
- package/tests/Database/QueryTest.ts +0 -573
- package/tests/Database/SchemaTest.ts +0 -32
- package/tests/Database/Seeders/RunnerTest.ts +0 -30
- package/tests/Database/Seeders/seeders/RandomSeeder.ts +0 -10
- package/tests/Database/utils.ts +0 -16
- package/tests/Forms/FormsTest.ts +0 -59
- package/tests/Framework/Middleware/StaticAssetsMiddlewareTest.ts +0 -129
- package/tests/Framework/Resolvers/EntityResolverTest.ts +0 -48
- package/tests/Framework/Router/RouterTest.ts +0 -33
- package/tests/Mail/MailerTest.ts +0 -76
- package/tests/Model/ModelTest.ts +0 -183
- package/tests/Router/HttpHandlerTest.ts +0 -72
- package/tests/Router/RequestTest.ts +0 -77
- package/tests/Router/WebSocketsHandlerTest.ts +0 -51
- package/tests/Storage/StorageTest.ts +0 -97
- package/tests/Support/ArrayTest.ts +0 -167
- package/tests/Support/StringTest.ts +0 -18
- package/tests/Validation/RulesTest.ts +0 -54
- package/types.d.ts +0 -8
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { suite, test } from '@testdeck/mocha'
|
|
2
|
-
import { expect } from 'chai'
|
|
3
|
-
import { Connection, Query } from '../../Database'
|
|
4
|
-
import { User } from './Entities/User'
|
|
5
|
-
import { Role } from './Entities/Role'
|
|
6
|
-
import { SqliteDriver } from '@Typetron/Database/Drivers'
|
|
7
|
-
|
|
8
|
-
@suite
|
|
9
|
-
class SchemaTest {
|
|
10
|
-
|
|
11
|
-
async before() {
|
|
12
|
-
Query.connection = new Connection(new SqliteDriver(':memory:'))
|
|
13
|
-
// Query.connection = new Connection(new MysqlDriver({
|
|
14
|
-
// host: 'localhost', user: 'root', password: 'root', database: 'typetron_test'
|
|
15
|
-
// }))
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
@test
|
|
19
|
-
async createsPivotTable() {
|
|
20
|
-
await Query.connection.driver.schema.synchronize([User, Role].pluck('metadata'))
|
|
21
|
-
|
|
22
|
-
const tableName = [User.getTable(), Role.getTable()].sort().join('_')
|
|
23
|
-
const table = await Query.connection.tableExists(tableName)
|
|
24
|
-
expect(Boolean(table)).to.be.equal(true, 'Pivot table was not created')
|
|
25
|
-
const tableColumns = await Query.connection.tableColumns(tableName) as {name: string, type: string}[]
|
|
26
|
-
expect(tableColumns).to.have.length(2)
|
|
27
|
-
// expect(tableColumns[0]).to.deep.include({name: 'id', type: 'integer'});
|
|
28
|
-
expect(tableColumns[0]).to.deep.include({name: 'roleId'})
|
|
29
|
-
expect(tableColumns[1]).to.deep.include({name: 'userId'})
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { suite, test } from '@testdeck/mocha'
|
|
2
|
-
import { SeederManager } from '@Typetron/Database/Seeders'
|
|
3
|
-
import { expect } from 'chai'
|
|
4
|
-
import { Connection, Query, SqliteDriver } from '../../../Database'
|
|
5
|
-
import { Storage } from '../../../Storage'
|
|
6
|
-
|
|
7
|
-
@suite
|
|
8
|
-
class RunnerTest {
|
|
9
|
-
private runner: SeederManager
|
|
10
|
-
private seedsPath = './tests/Database/Seeders/seeders'
|
|
11
|
-
|
|
12
|
-
async before() {
|
|
13
|
-
Query.connection = new Connection(new SqliteDriver(':memory:'))
|
|
14
|
-
// Query.connection = new Connection(new MysqlDriver({
|
|
15
|
-
// host: 'localhost', user: 'root', password: 'root', database: 'typetron_test'
|
|
16
|
-
// }))
|
|
17
|
-
await Query.connection.runRaw('CREATE TABLE random_table (col1 varchar)')
|
|
18
|
-
|
|
19
|
-
this.runner = new SeederManager(new Storage(), this.seedsPath)
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
@test
|
|
23
|
-
async shouldSeed() {
|
|
24
|
-
await this.runner.seed()
|
|
25
|
-
|
|
26
|
-
const result = await Query.table<{ col1: string }>('random_table').first()
|
|
27
|
-
|
|
28
|
-
expect(result?.col1).to.be.equal('val1')
|
|
29
|
-
}
|
|
30
|
-
}
|
package/tests/Database/utils.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Expression } from '@Typetron/Database'
|
|
2
|
-
import { expect } from 'chai'
|
|
3
|
-
|
|
4
|
-
export function expectQuery(expression: Expression | string) {
|
|
5
|
-
const sql = expression instanceof Expression ? expression.toSQL() : expression
|
|
6
|
-
|
|
7
|
-
return {
|
|
8
|
-
toEqual: (expected: string) => {
|
|
9
|
-
expect(trimSQL(sql)).to.be.equal(trimSQL(expected))
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export function trimSQL(sql: string) {
|
|
15
|
-
return sql.replace(/(\r\n|\n|\r)/gm, ' ').replace(/`/gm, '').replace(/ +/g, ' ').trim()
|
|
16
|
-
}
|
package/tests/Forms/FormsTest.ts
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { suite, test } from '@testdeck/mocha'
|
|
2
|
-
import { MinLength, Required } from '../../Validation'
|
|
3
|
-
import { Field, Form, Rules } from '@Typetron/Forms'
|
|
4
|
-
import { expect } from 'chai'
|
|
5
|
-
import { Optional } from '@Typetron/Validation/Rules/Optional'
|
|
6
|
-
|
|
7
|
-
@suite
|
|
8
|
-
class FormsTest {
|
|
9
|
-
|
|
10
|
-
@test
|
|
11
|
-
validatesFormBasedOnValidators() {
|
|
12
|
-
|
|
13
|
-
class UserForm extends Form {
|
|
14
|
-
@Field()
|
|
15
|
-
@Rules(Required)
|
|
16
|
-
name: string
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const formData = {
|
|
20
|
-
name: 'John'
|
|
21
|
-
}
|
|
22
|
-
const form = new UserForm()
|
|
23
|
-
form.fill(formData)
|
|
24
|
-
|
|
25
|
-
expect(form.valid()).to.be.equal(true)
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
@test
|
|
29
|
-
showsErrorWhenFormIsInvalid() {
|
|
30
|
-
class UserForm extends Form {
|
|
31
|
-
@Field()
|
|
32
|
-
@Rules(Required)
|
|
33
|
-
name: string
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const form = new UserForm()
|
|
37
|
-
|
|
38
|
-
expect(form.valid()).to.be.equal(false)
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
@test
|
|
42
|
-
doesNotGiveErrorForOptionalFieldsThatHaveValidatorsAlready() {
|
|
43
|
-
class UserForm extends Form {
|
|
44
|
-
@Field()
|
|
45
|
-
@Rules(Optional, MinLength(10))
|
|
46
|
-
name?: string
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const validForm = new UserForm()
|
|
50
|
-
|
|
51
|
-
expect(validForm.valid()).to.be.equal(true)
|
|
52
|
-
|
|
53
|
-
const invalidForm = new UserForm()
|
|
54
|
-
invalidForm.fill({name: ''} as object)
|
|
55
|
-
|
|
56
|
-
expect(invalidForm.valid()).to.be.equal(false)
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
}
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import { suite, test } from '@testdeck/mocha'
|
|
2
|
-
import { Container } from '@Typetron/Container'
|
|
3
|
-
import { Handler, Http, Request } from '@Typetron/Router/Http'
|
|
4
|
-
import { expect } from 'chai'
|
|
5
|
-
import { Router } from '@Typetron/Router'
|
|
6
|
-
import { StaticAssetsMiddleware } from '@Typetron/Framework/Middleware/StaticAssetsMiddleware'
|
|
7
|
-
import { AppConfig } from '@Typetron/Framework'
|
|
8
|
-
import * as path from 'path'
|
|
9
|
-
|
|
10
|
-
@suite
|
|
11
|
-
class StaticAssetsMiddlewareTest {
|
|
12
|
-
|
|
13
|
-
@test
|
|
14
|
-
async 'resolves url to a local directory'() {
|
|
15
|
-
const container = new Container()
|
|
16
|
-
|
|
17
|
-
container.set<Partial<AppConfig>>(AppConfig, {
|
|
18
|
-
staticAssets: [
|
|
19
|
-
{
|
|
20
|
-
url: 'assets/.*',
|
|
21
|
-
path: path.join(__dirname, '')
|
|
22
|
-
}
|
|
23
|
-
]
|
|
24
|
-
})
|
|
25
|
-
const router = container.get(Router)
|
|
26
|
-
router.middleware.http.push(StaticAssetsMiddleware)
|
|
27
|
-
|
|
28
|
-
const handler = container.get(Handler)
|
|
29
|
-
const request = new Request('assets/styles.css', Http.Method.GET)
|
|
30
|
-
const response = await handler.handle(container, request)
|
|
31
|
-
|
|
32
|
-
expect(response.headers['Content-type']).to.be.equal('text/css')
|
|
33
|
-
expect(String(response.body)).to.contain('color : purple')
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
@test
|
|
37
|
-
async 'resolves url to a static asset with the exact same name'() {
|
|
38
|
-
const container = new Container()
|
|
39
|
-
|
|
40
|
-
container.set<Partial<AppConfig>>(AppConfig, {
|
|
41
|
-
staticAssets: [
|
|
42
|
-
{
|
|
43
|
-
url: '.*',
|
|
44
|
-
path: path.join(__dirname, 'articles')
|
|
45
|
-
}
|
|
46
|
-
]
|
|
47
|
-
})
|
|
48
|
-
const router = container.get(Router)
|
|
49
|
-
router.middleware.http.push(StaticAssetsMiddleware)
|
|
50
|
-
|
|
51
|
-
const handler = container.get(Handler)
|
|
52
|
-
const request = new Request('my-article.html', Http.Method.GET)
|
|
53
|
-
const response = await handler.handle(container, request)
|
|
54
|
-
|
|
55
|
-
expect(response.headers['Content-type']).to.be.equal('text/html')
|
|
56
|
-
expect(String(response.body)).to.contain('article')
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
@test
|
|
60
|
-
async 'resolves url to a static asset returning index file'() {
|
|
61
|
-
const container = new Container()
|
|
62
|
-
|
|
63
|
-
container.set<Partial<AppConfig>>(AppConfig, {
|
|
64
|
-
staticAssets: [
|
|
65
|
-
{
|
|
66
|
-
url: '.*',
|
|
67
|
-
path: path.join(__dirname, 'articles')
|
|
68
|
-
}
|
|
69
|
-
]
|
|
70
|
-
})
|
|
71
|
-
const router = container.get(Router)
|
|
72
|
-
router.middleware.http.push(StaticAssetsMiddleware)
|
|
73
|
-
|
|
74
|
-
const handler = container.get(Handler)
|
|
75
|
-
const request = new Request('some-directory', Http.Method.GET)
|
|
76
|
-
const response = await handler.handle(container, request)
|
|
77
|
-
|
|
78
|
-
expect(response.headers['Content-type']).to.be.equal('text/html')
|
|
79
|
-
expect(String(response.body)).to.contain('index file')
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
@test
|
|
83
|
-
async 'resolves url to base path'() {
|
|
84
|
-
const container = new Container()
|
|
85
|
-
|
|
86
|
-
container.set<Partial<AppConfig>>(AppConfig, {
|
|
87
|
-
staticAssets: [
|
|
88
|
-
{
|
|
89
|
-
url: '.*',
|
|
90
|
-
path: path.join(__dirname, 'articles/some-directory'),
|
|
91
|
-
basePath: true
|
|
92
|
-
}
|
|
93
|
-
]
|
|
94
|
-
})
|
|
95
|
-
const router = container.get(Router)
|
|
96
|
-
router.middleware.http.push(StaticAssetsMiddleware)
|
|
97
|
-
|
|
98
|
-
const handler = container.get(Handler)
|
|
99
|
-
const request = new Request('test', Http.Method.GET)
|
|
100
|
-
const response = await handler.handle(container, request)
|
|
101
|
-
|
|
102
|
-
expect(response.headers['Content-type']).to.be.equal('text/html')
|
|
103
|
-
expect(String(response.body)).to.contain('index file')
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
@test
|
|
107
|
-
async 'resolves to static resource of when having base path'() {
|
|
108
|
-
const container = new Container()
|
|
109
|
-
|
|
110
|
-
container.set<Partial<AppConfig>>(AppConfig, {
|
|
111
|
-
staticAssets: [
|
|
112
|
-
{
|
|
113
|
-
url: '.*',
|
|
114
|
-
path: path.join(__dirname, 'assets'),
|
|
115
|
-
basePath: true
|
|
116
|
-
}
|
|
117
|
-
]
|
|
118
|
-
})
|
|
119
|
-
const router = container.get(Router)
|
|
120
|
-
router.middleware.http.push(StaticAssetsMiddleware)
|
|
121
|
-
|
|
122
|
-
const handler = container.get(Handler)
|
|
123
|
-
const request = new Request('styles.css', Http.Method.GET)
|
|
124
|
-
const response = await handler.handle(container, request)
|
|
125
|
-
|
|
126
|
-
expect(response.headers['Content-type']).to.be.equal('text/css')
|
|
127
|
-
expect(String(response.body)).to.contain('color : purple')
|
|
128
|
-
}
|
|
129
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { suite, test } from '@testdeck/mocha'
|
|
2
|
-
import { Container } from '@Typetron/Container'
|
|
3
|
-
import { Column, Connection, Entity, ID, Query, SqliteDriver } from '@Typetron/Database'
|
|
4
|
-
import { Handler } from '@Typetron/Router/Websockets'
|
|
5
|
-
import { AnyFunction, Type } from '@Typetron/Support'
|
|
6
|
-
import { Http, Request, Response } from '@Typetron/Router/Http'
|
|
7
|
-
import { anyOfClass, instance, mock, when } from 'ts-mockito'
|
|
8
|
-
import { EntityResolver } from '@Typetron/Framework/Resolvers/EntityResolver'
|
|
9
|
-
import { expect } from 'chai'
|
|
10
|
-
|
|
11
|
-
@suite
|
|
12
|
-
class EntityResolverTest {
|
|
13
|
-
|
|
14
|
-
@test
|
|
15
|
-
async 'resolves entity parameters'() {
|
|
16
|
-
const connection = mock(Connection)
|
|
17
|
-
Query.connection = instance(connection)
|
|
18
|
-
Query.connection.driver = new SqliteDriver(':memory:')
|
|
19
|
-
when(connection.first(anyOfClass(Query))).thenResolve({id: 2}, {id: 3})
|
|
20
|
-
|
|
21
|
-
const container = new Container()
|
|
22
|
-
container.resolvers.unshift(new EntityResolver(container))
|
|
23
|
-
|
|
24
|
-
class User extends Entity {
|
|
25
|
-
@Column()
|
|
26
|
-
id: ID
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
class Controller {
|
|
30
|
-
read(thisUser: User, thatUser: User) {
|
|
31
|
-
return [thisUser.id, thatUser.id]
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const handler = container.get(Handler)
|
|
36
|
-
handler.addAction('read', Controller, 'read', [User as unknown as Type<AnyFunction>, User as unknown as Type<AnyFunction>])
|
|
37
|
-
|
|
38
|
-
const request = new Request('read', Http.Method.GET)
|
|
39
|
-
request.parameters = {
|
|
40
|
-
0: 2,
|
|
41
|
-
1: 3
|
|
42
|
-
}
|
|
43
|
-
const response: Response<[ID, ID]> = await handler.handle(container, request)
|
|
44
|
-
|
|
45
|
-
expect(response.body[0]).to.be.equal(2)
|
|
46
|
-
expect(response.body[1]).to.be.equal(3)
|
|
47
|
-
}
|
|
48
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { suite, test } from '@testdeck/mocha'
|
|
2
|
-
import { expect } from 'chai'
|
|
3
|
-
import { Action, Body, Controller, Get, Router } from '../../../Router'
|
|
4
|
-
import { App, Application } from '@Typetron/Framework'
|
|
5
|
-
import { AuthUser } from '../../../Framework/Auth'
|
|
6
|
-
|
|
7
|
-
@suite
|
|
8
|
-
class RouterTest {
|
|
9
|
-
|
|
10
|
-
@test
|
|
11
|
-
'registers http routes and websocket actions'() {
|
|
12
|
-
App.instance = new Application('./tests')
|
|
13
|
-
|
|
14
|
-
@Controller()
|
|
15
|
-
class MyController {
|
|
16
|
-
|
|
17
|
-
@Action()
|
|
18
|
-
create(@AuthUser() user: string) {}
|
|
19
|
-
|
|
20
|
-
@Get()
|
|
21
|
-
list(@Body() content: number) {}
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const router = App.instance.get(Router)
|
|
26
|
-
|
|
27
|
-
expect(router.routes).to.have.length(1)
|
|
28
|
-
expect(router.actions).to.have.length(1)
|
|
29
|
-
expect(router.routes[0]).to.deep.include({name: 'list'})
|
|
30
|
-
expect(router.actions.get('create')).to.deep.include({name: 'create'})
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
}
|
package/tests/Mail/MailerTest.ts
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { suite, test } from '@testdeck/mocha'
|
|
2
|
-
import { Mailable, Mailer, MemoryTransport } from '@Typetron/Mail'
|
|
3
|
-
import { expect } from 'chai'
|
|
4
|
-
|
|
5
|
-
class Order {
|
|
6
|
-
constructor(public id: number) {
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
class OrderShipped extends Mailable {
|
|
11
|
-
constructor(public order: Order) {
|
|
12
|
-
super()
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
content() {
|
|
16
|
-
return {
|
|
17
|
-
html: `<h2>Order #${this.order.id} shipped</h2>`,
|
|
18
|
-
text: `Order #${this.order.id} shipped`
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
@suite
|
|
24
|
-
class MailerTest {
|
|
25
|
-
mail = new Mailer({email: 'tester@test.com'}, new MemoryTransport())
|
|
26
|
-
|
|
27
|
-
@test
|
|
28
|
-
async canSendSimpleMessage() {
|
|
29
|
-
const sentMessage = await this.mail.to('john@example.com')
|
|
30
|
-
.from('from@example.com')
|
|
31
|
-
.replyTo('replyTo@example.com')
|
|
32
|
-
.subject('test')
|
|
33
|
-
.cc('moreUsers@example.com')
|
|
34
|
-
.bcc('evenMoreUsers@example.com')
|
|
35
|
-
.send('Order #123 shipped')
|
|
36
|
-
|
|
37
|
-
expect(sentMessage.replyTo).to.deep.equal('replyTo@example.com')
|
|
38
|
-
expect(sentMessage.subject).to.deep.equal('test')
|
|
39
|
-
expect(sentMessage.from).to.deep.equal('from@example.com')
|
|
40
|
-
expect(sentMessage.to).to.deep.equal('john@example.com')
|
|
41
|
-
expect(sentMessage.cc).to.equal('moreUsers@example.com')
|
|
42
|
-
expect(sentMessage.bcc).to.equal('evenMoreUsers@example.com')
|
|
43
|
-
expect(sentMessage.body).to.equal('Order #123 shipped')
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
@test
|
|
47
|
-
async canSendHtmlMessage() {
|
|
48
|
-
const sentMessage = await this.mail.to('john@example.com')
|
|
49
|
-
.cc('moreUsers@example.com')
|
|
50
|
-
.bcc('evenMoreUsers@example.com')
|
|
51
|
-
.send({html: '<h2>Order #1234 shipped</h2>', text: 'Order #1234 shipped'})
|
|
52
|
-
|
|
53
|
-
expect(sentMessage.to).to.equal('john@example.com')
|
|
54
|
-
expect(sentMessage.cc).to.equal('moreUsers@example.com')
|
|
55
|
-
expect(sentMessage.bcc).to.equal('evenMoreUsers@example.com')
|
|
56
|
-
expect(sentMessage.body).to.deep.equal({html: '<h2>Order #1234 shipped</h2>', text: 'Order #1234 shipped'})
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
@test
|
|
60
|
-
async canSendMailable() {
|
|
61
|
-
const order = new Order(1234)
|
|
62
|
-
|
|
63
|
-
const sentMessage = await this.mail.to('john@example.com')
|
|
64
|
-
.cc('moreUsers@example.com')
|
|
65
|
-
.bcc('evenMoreUsers@example.com')
|
|
66
|
-
.send(new OrderShipped(order))
|
|
67
|
-
|
|
68
|
-
expect(sentMessage.to).to.equal('john@example.com')
|
|
69
|
-
expect(sentMessage.cc).to.equal('moreUsers@example.com')
|
|
70
|
-
expect(sentMessage.bcc).to.equal('evenMoreUsers@example.com')
|
|
71
|
-
expect(sentMessage.body).to.deep.equal({
|
|
72
|
-
html: `<h2>Order #${order.id} shipped</h2>`,
|
|
73
|
-
text: `Order #${order.id} shipped`
|
|
74
|
-
})
|
|
75
|
-
}
|
|
76
|
-
}
|
package/tests/Model/ModelTest.ts
DELETED
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
import { expect } from 'chai'
|
|
2
|
-
import { suite, test } from '@testdeck/mocha'
|
|
3
|
-
import { Field, FieldMany, Model } from '../../Models'
|
|
4
|
-
|
|
5
|
-
@suite
|
|
6
|
-
class ModelTest {
|
|
7
|
-
@test
|
|
8
|
-
mapsSingleObject() {
|
|
9
|
-
class UserModel extends Model {
|
|
10
|
-
@Field()
|
|
11
|
-
id: number
|
|
12
|
-
|
|
13
|
-
@Field()
|
|
14
|
-
name: string
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const user = {
|
|
18
|
-
id: 1,
|
|
19
|
-
name: 'John',
|
|
20
|
-
age: 20
|
|
21
|
-
}
|
|
22
|
-
const expectedUser = {
|
|
23
|
-
id: 1,
|
|
24
|
-
name: 'John'
|
|
25
|
-
}
|
|
26
|
-
expect(UserModel.from(user)).to.deep.equal(expectedUser)
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
// @test
|
|
30
|
-
// mapsSingleObjectHavingUndefinedProperties() {
|
|
31
|
-
// class UserModel extends Model {
|
|
32
|
-
// @Field()
|
|
33
|
-
// id: number;
|
|
34
|
-
//
|
|
35
|
-
// @Field()
|
|
36
|
-
// name: string;
|
|
37
|
-
// }
|
|
38
|
-
//
|
|
39
|
-
// const user = {
|
|
40
|
-
// id: 1
|
|
41
|
-
// };
|
|
42
|
-
// const expectedUser = {
|
|
43
|
-
// id: 1,
|
|
44
|
-
// name: 'John'
|
|
45
|
-
// };
|
|
46
|
-
// expect(UserModel.from(user)).to.deep.equal(expectedUser);
|
|
47
|
-
// }
|
|
48
|
-
|
|
49
|
-
@test
|
|
50
|
-
mapsListOfObject() {
|
|
51
|
-
class UserModel extends Model {
|
|
52
|
-
@Field()
|
|
53
|
-
id: number
|
|
54
|
-
|
|
55
|
-
@Field()
|
|
56
|
-
name: string
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const user = {
|
|
60
|
-
id: 1,
|
|
61
|
-
name: 'John',
|
|
62
|
-
age: 20
|
|
63
|
-
}
|
|
64
|
-
const expectedUser = {
|
|
65
|
-
id: 1,
|
|
66
|
-
name: 'John'
|
|
67
|
-
}
|
|
68
|
-
expect(UserModel.from([user, user])).to.deep.equal([expectedUser, expectedUser])
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
@test
|
|
72
|
-
mapsDeepModelObject() {
|
|
73
|
-
class ProfileModel extends Model {
|
|
74
|
-
@Field()
|
|
75
|
-
address: string
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
class UserModel extends Model {
|
|
79
|
-
@Field()
|
|
80
|
-
id: number
|
|
81
|
-
|
|
82
|
-
@Field()
|
|
83
|
-
name: string
|
|
84
|
-
|
|
85
|
-
@Field()
|
|
86
|
-
profile: ProfileModel
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
const user = {
|
|
90
|
-
id: 1,
|
|
91
|
-
name: 'John',
|
|
92
|
-
age: 20,
|
|
93
|
-
profile: {
|
|
94
|
-
address: 'somewhere',
|
|
95
|
-
picture: 'avatar'
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
const expectedUser = {
|
|
99
|
-
id: 1,
|
|
100
|
-
name: 'John',
|
|
101
|
-
profile: {
|
|
102
|
-
address: 'somewhere'
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
expect(UserModel.from(user)).to.deep.equal(expectedUser)
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
@test
|
|
109
|
-
mapsDeepListOfObject() {
|
|
110
|
-
class PostModel extends Model {
|
|
111
|
-
@Field()
|
|
112
|
-
title: string
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
class UserModel extends Model {
|
|
116
|
-
@Field()
|
|
117
|
-
id: number
|
|
118
|
-
|
|
119
|
-
@Field()
|
|
120
|
-
name: string
|
|
121
|
-
|
|
122
|
-
@Field()
|
|
123
|
-
@FieldMany(PostModel)
|
|
124
|
-
posts: PostModel[]
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
const user = {
|
|
128
|
-
id: 1,
|
|
129
|
-
name: 'John',
|
|
130
|
-
age: 20,
|
|
131
|
-
posts: [
|
|
132
|
-
{
|
|
133
|
-
title: 'first post',
|
|
134
|
-
content: 'some content'
|
|
135
|
-
}
|
|
136
|
-
]
|
|
137
|
-
}
|
|
138
|
-
const expectedUser = {
|
|
139
|
-
id: 1,
|
|
140
|
-
name: 'John',
|
|
141
|
-
posts: [
|
|
142
|
-
{
|
|
143
|
-
title: 'first post',
|
|
144
|
-
}
|
|
145
|
-
]
|
|
146
|
-
}
|
|
147
|
-
expect(UserModel.from(user)).to.deep.equal(expectedUser)
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
@test
|
|
151
|
-
async 'Handles a promise with an object'() {
|
|
152
|
-
class UserModel extends Model {
|
|
153
|
-
@Field()
|
|
154
|
-
name: string
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
const user = {
|
|
158
|
-
name: 'John',
|
|
159
|
-
age: 20
|
|
160
|
-
}
|
|
161
|
-
const expectedUser = {
|
|
162
|
-
name: 'John'
|
|
163
|
-
}
|
|
164
|
-
expect(await UserModel.from(Promise.resolve(user))).to.deep.equal(expectedUser)
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
@test
|
|
168
|
-
async 'Handles a promise with a list of objects'() {
|
|
169
|
-
class UserModel extends Model {
|
|
170
|
-
@Field()
|
|
171
|
-
name: string
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
const user = {
|
|
175
|
-
name: 'John',
|
|
176
|
-
age: 20
|
|
177
|
-
}
|
|
178
|
-
const expectedUser = {
|
|
179
|
-
name: 'John'
|
|
180
|
-
}
|
|
181
|
-
expect(await UserModel.from(Promise.resolve([user, user]))).to.deep.equal([expectedUser, expectedUser])
|
|
182
|
-
}
|
|
183
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { suite, test } from '@testdeck/mocha'
|
|
2
|
-
import { Handler, Http, Request } from '../../Router/Http'
|
|
3
|
-
import { expect } from 'chai'
|
|
4
|
-
import { Container } from '@Typetron/Container'
|
|
5
|
-
import { Body, Controller, Get } from '../../Router'
|
|
6
|
-
|
|
7
|
-
@suite
|
|
8
|
-
class HttpHandlerTest {
|
|
9
|
-
private container: Container
|
|
10
|
-
|
|
11
|
-
async before() {
|
|
12
|
-
this.container = new Container()
|
|
13
|
-
Container.setInstance(this.container)
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
@test
|
|
17
|
-
'gives error when two routes have the same path'() {
|
|
18
|
-
|
|
19
|
-
class MyController {
|
|
20
|
-
index() {}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const handler = this.container.get(Handler)
|
|
24
|
-
handler.addRoute('', Http.Method.GET, MyController, 'index', 'index')
|
|
25
|
-
|
|
26
|
-
expect(() => handler.addRoute('', Http.Method.POST, MyController, 'index', 'index'))
|
|
27
|
-
.to.not.throw(`There is already a route with the same url: [GET] ''`)
|
|
28
|
-
expect(() => handler.addRoute('', Http.Method.GET, MyController, 'index', 'index'))
|
|
29
|
-
.to.throw(`There is already a route with the same url: [GET] ''`)
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
@test
|
|
33
|
-
async 'returns the value from the @Body'() {
|
|
34
|
-
@Controller()
|
|
35
|
-
class MyController {
|
|
36
|
-
@Get('list')
|
|
37
|
-
list(@Body() value: string) {
|
|
38
|
-
return value
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
@Get('create')
|
|
42
|
-
create(@Body() value: string) {
|
|
43
|
-
return value
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const router = this.container.get(Handler)
|
|
48
|
-
|
|
49
|
-
const listContent = await router.handle(this.container, new Request('list', Http.Method.GET, undefined, {}, 'test'))
|
|
50
|
-
expect(listContent.body).to.be.equal('test')
|
|
51
|
-
|
|
52
|
-
const createContent = await router.handle(this.container, new Request('create', Http.Method.GET))
|
|
53
|
-
expect(createContent.body).to.be.equal(undefined)
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// @test
|
|
57
|
-
// async 'caches route urls'(done: Function) {
|
|
58
|
-
// class Controller {
|
|
59
|
-
// index() {}
|
|
60
|
-
// }
|
|
61
|
-
//
|
|
62
|
-
// const router = new Router()
|
|
63
|
-
// router.add('', Http.Method.GET, Controller, 'index', 'index')
|
|
64
|
-
//
|
|
65
|
-
// expect(router.cachedRoutes).to.be.have.length(0)
|
|
66
|
-
//
|
|
67
|
-
// const app = new Container()
|
|
68
|
-
// const request = new Request('', Http.Method.GET)
|
|
69
|
-
// await router.handle(app as Application, request)
|
|
70
|
-
// expect(router.findRouteIndex).to.be.called.once // ???
|
|
71
|
-
// }
|
|
72
|
-
}
|