@typetron/framework 0.5.0 → 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.
Files changed (197) hide show
  1. package/build/Database/EntityProxyHandler.js +2 -2
  2. package/build/Database/EntityProxyHandler.js.map +1 -1
  3. package/package.json +4 -7
  4. package/.eslintrc-old.js +0 -208
  5. package/Cache/Cache.ts +0 -13
  6. package/Cache/Stores/DatabaseStore.ts +0 -120
  7. package/Cache/Stores/FileStore.ts +0 -69
  8. package/Cache/Stores/MemoryStore.ts +0 -71
  9. package/Cache/index.ts +0 -5
  10. package/Cache/types.ts +0 -4
  11. package/Container/ClassResolver.ts +0 -106
  12. package/Container/Container.ts +0 -144
  13. package/Container/Contracts.ts +0 -3
  14. package/Container/Decorators.ts +0 -20
  15. package/Container/Metadata.ts +0 -16
  16. package/Container/Resolver.ts +0 -27
  17. package/Container/index.ts +0 -5
  18. package/Database/Clauses/Where.ts +0 -0
  19. package/Database/Connection.ts +0 -52
  20. package/Database/Decorators.ts +0 -142
  21. package/Database/Drivers/DatabaseDriver.ts +0 -37
  22. package/Database/Drivers/MySQL/Alter/index.ts +0 -55
  23. package/Database/Drivers/MySQL/ColumnDefinition.ts +0 -16
  24. package/Database/Drivers/MySQL/Create.ts +0 -47
  25. package/Database/Drivers/MySQL/MysqlDriver.ts +0 -123
  26. package/Database/Drivers/MySQL/Schema.ts +0 -82
  27. package/Database/Drivers/MySQL/index.ts +0 -13
  28. package/Database/Drivers/SQL/Schema.ts +0 -73
  29. package/Database/Drivers/SQL/Statements/Alter.ts +0 -22
  30. package/Database/Drivers/SQL/Statements/BaseStatement.ts +0 -55
  31. package/Database/Drivers/SQL/Statements/Delete.ts +0 -20
  32. package/Database/Drivers/SQL/Statements/Insert.ts +0 -24
  33. package/Database/Drivers/SQL/Statements/Select.ts +0 -55
  34. package/Database/Drivers/SQL/Statements/Update.ts +0 -33
  35. package/Database/Drivers/SQL/index.ts +0 -8
  36. package/Database/Drivers/SQLite/Create.ts +0 -45
  37. package/Database/Drivers/SQLite/Schema.ts +0 -54
  38. package/Database/Drivers/SQLite/SqliteDriver.ts +0 -144
  39. package/Database/Drivers/SQLite/index.ts +0 -15
  40. package/Database/Drivers/SchemaContract.ts +0 -11
  41. package/Database/Drivers/Statement.ts +0 -16
  42. package/Database/Drivers/index.ts +0 -4
  43. package/Database/Entity.ts +0 -377
  44. package/Database/EntityNotFoundError.ts +0 -5
  45. package/Database/EntityProxyHandler.ts +0 -43
  46. package/Database/EntityQuery.ts +0 -197
  47. package/Database/Expression.ts +0 -3
  48. package/Database/Fields.ts +0 -816
  49. package/Database/Helpers.ts +0 -12
  50. package/Database/List.ts +0 -71
  51. package/Database/Migrations/Migration.ts +0 -10
  52. package/Database/Migrations/MigrationHistory.ts +0 -20
  53. package/Database/Migrations/Migrator.ts +0 -122
  54. package/Database/Migrations/index.ts +0 -3
  55. package/Database/ORM/BaseRelationship.ts +0 -10
  56. package/Database/Query.ts +0 -374
  57. package/Database/Seeders/Seeder.ts +0 -3
  58. package/Database/Seeders/SeederManager.ts +0 -27
  59. package/Database/Seeders/index.ts +0 -2
  60. package/Database/StringExpression.ts +0 -9
  61. package/Database/Types.ts +0 -165
  62. package/Database/index.ts +0 -23
  63. package/Encryption/index.ts +0 -51
  64. package/Forms/Decorators.ts +0 -29
  65. package/Forms/Form.ts +0 -70
  66. package/Forms/FormFields.ts +0 -36
  67. package/Forms/index.ts +0 -3
  68. package/Framework/App.ts +0 -10
  69. package/Framework/Application.ts +0 -118
  70. package/Framework/Auth/Auth.ts +0 -122
  71. package/Framework/Auth/Authenticatable.ts +0 -9
  72. package/Framework/Auth/User.ts +0 -27
  73. package/Framework/Auth/index.ts +0 -29
  74. package/Framework/Config/AppConfig.ts +0 -25
  75. package/Framework/Config/AuthConfig.ts +0 -9
  76. package/Framework/Config/BaseConfig.ts +0 -9
  77. package/Framework/Config/CacheConfig.ts +0 -38
  78. package/Framework/Config/DatabaseConfig.ts +0 -21
  79. package/Framework/Config/MailConfig.ts +0 -30
  80. package/Framework/Config/index.ts +0 -6
  81. package/Framework/Middleware/AuthMiddleware.ts +0 -31
  82. package/Framework/Middleware/CorsMiddleware.ts +0 -32
  83. package/Framework/Middleware/StaticAssetsMiddleware.ts +0 -76
  84. package/Framework/Middleware/index.ts +0 -2
  85. package/Framework/Provider.ts +0 -9
  86. package/Framework/Providers/CacheProvider.ts +0 -28
  87. package/Framework/Providers/DatabaseProvider.ts +0 -36
  88. package/Framework/Providers/MailProvider.ts +0 -31
  89. package/Framework/Providers/WebsocketsProvider.ts +0 -120
  90. package/Framework/Resolvers/AuthResolver.ts +0 -23
  91. package/Framework/Resolvers/EntityResolver.ts +0 -41
  92. package/Framework/Resolvers/FormResolver.ts +0 -37
  93. package/Framework/RootDir.ts +0 -1
  94. package/Framework/index.ts +0 -8
  95. package/Frontend/Angular/index.ts +0 -24
  96. package/Frontend/Websockets/index.ts +0 -86
  97. package/Mail/MailAddress.ts +0 -4
  98. package/Mail/MailTransport.ts +0 -6
  99. package/Mail/Mailable.ts +0 -16
  100. package/Mail/Mailer.ts +0 -27
  101. package/Mail/PendingMail.ts +0 -68
  102. package/Mail/SentMessage.ts +0 -20
  103. package/Mail/Transports/MemoryTransport.ts +0 -13
  104. package/Mail/Transports/SendGridTransport.ts +0 -95
  105. package/Mail/index.ts +0 -3
  106. package/Models/Model.ts +0 -41
  107. package/Models/index.ts +0 -54
  108. package/Router/BaseController.ts +0 -7
  109. package/Router/Decorators.ts +0 -224
  110. package/Router/Guard.ts +0 -10
  111. package/Router/Http/Contracts.ts +0 -4
  112. package/Router/Http/ErrorHandler.ts +0 -45
  113. package/Router/Http/ErrorHandlerInterface.ts +0 -6
  114. package/Router/Http/Errors/HttpError.ts +0 -15
  115. package/Router/Http/Handler.ts +0 -183
  116. package/Router/Http/HttpRoute.ts +0 -110
  117. package/Router/Http/Middleware.ts +0 -7
  118. package/Router/Http/Request.ts +0 -225
  119. package/Router/Http/Response.ts +0 -35
  120. package/Router/Http/index.ts +0 -85
  121. package/Router/Metadata.ts +0 -34
  122. package/Router/Middleware.ts +0 -16
  123. package/Router/Request.ts +0 -65
  124. package/Router/Route.ts +0 -16
  125. package/Router/RouteNotFoundError.ts +0 -5
  126. package/Router/Router.ts +0 -35
  127. package/Router/Servers/index.ts +0 -6
  128. package/Router/Servers/node.ts +0 -49
  129. package/Router/Servers/uNetworking.ts +0 -151
  130. package/Router/Websockets/Handler.ts +0 -82
  131. package/Router/Websockets/Middleware.ts +0 -7
  132. package/Router/Websockets/Request.ts +0 -3
  133. package/Router/Websockets/WebsocketRoute.ts +0 -61
  134. package/Router/Websockets/index.ts +0 -57
  135. package/Router/Websockets/types.ts +0 -23
  136. package/Router/index.ts +0 -6
  137. package/Storage/File.ts +0 -30
  138. package/Storage/Image.ts +0 -19
  139. package/Storage/InvalidImage.ts +0 -3
  140. package/Storage/Storage.ts +0 -98
  141. package/Storage/index.ts +0 -4
  142. package/Storage/utils.ts +0 -18
  143. package/Support/Array.ts +0 -184
  144. package/Support/Math.ts +0 -12
  145. package/Support/Metadata.ts +0 -31
  146. package/Support/String.ts +0 -38
  147. package/Support/index.ts +0 -19
  148. package/Support/utils.ts +0 -7
  149. package/Testing/TestCase.ts +0 -193
  150. package/Validation/Rule.ts +0 -9
  151. package/Validation/RuleInterface.ts +0 -10
  152. package/Validation/Rules/Email.ts +0 -20
  153. package/Validation/Rules/FileExtension.ts +0 -21
  154. package/Validation/Rules/MaxLength.ts +0 -17
  155. package/Validation/Rules/MinLength.ts +0 -18
  156. package/Validation/Rules/Optional.ts +0 -18
  157. package/Validation/Rules/Required.ts +0 -29
  158. package/Validation/Validator.ts +0 -7
  159. package/Validation/index.ts +0 -12
  160. package/benchmark-index.js +0 -20
  161. package/benchmark.ts +0 -47
  162. package/tests/Cache/DatabaseStoreTest.ts +0 -110
  163. package/tests/Cache/FileStoreTest.ts +0 -93
  164. package/tests/Cache/MemoryStoreTest.ts +0 -92
  165. package/tests/Container/ContainerTest.ts +0 -336
  166. package/tests/Database/Drivers/MySQL/AlterTest.ts +0 -100
  167. package/tests/Database/Drivers/MySQL/CreateTest.ts +0 -39
  168. package/tests/Database/Drivers/MysqlDriverTest.ts +0 -140
  169. package/tests/Database/Drivers/SqliteDriverTest.ts +0 -126
  170. package/tests/Database/Entities/Article.ts +0 -21
  171. package/tests/Database/Entities/Profile.ts +0 -21
  172. package/tests/Database/Entities/Role.ts +0 -15
  173. package/tests/Database/Entities/User.ts +0 -35
  174. package/tests/Database/EntityRelationshipsTest.ts +0 -475
  175. package/tests/Database/EntityTest.ts +0 -202
  176. package/tests/Database/Migrations/RunnerTest.ts +0 -96
  177. package/tests/Database/Migrations/migrations/1.createUserTable.ts +0 -12
  178. package/tests/Database/Migrations/migrations/2.createArticlesTable.ts +0 -12
  179. package/tests/Database/QueryTest.ts +0 -573
  180. package/tests/Database/SchemaTest.ts +0 -32
  181. package/tests/Database/Seeders/RunnerTest.ts +0 -30
  182. package/tests/Database/Seeders/seeders/RandomSeeder.ts +0 -10
  183. package/tests/Database/utils.ts +0 -16
  184. package/tests/Forms/FormsTest.ts +0 -59
  185. package/tests/Framework/Middleware/StaticAssetsMiddlewareTest.ts +0 -129
  186. package/tests/Framework/Resolvers/EntityResolverTest.ts +0 -48
  187. package/tests/Framework/Router/RouterTest.ts +0 -33
  188. package/tests/Mail/MailerTest.ts +0 -76
  189. package/tests/Model/ModelTest.ts +0 -183
  190. package/tests/Router/HttpHandlerTest.ts +0 -72
  191. package/tests/Router/RequestTest.ts +0 -77
  192. package/tests/Router/WebSocketsHandlerTest.ts +0 -51
  193. package/tests/Storage/StorageTest.ts +0 -97
  194. package/tests/Support/ArrayTest.ts +0 -167
  195. package/tests/Support/StringTest.ts +0 -18
  196. package/tests/Validation/RulesTest.ts +0 -54
  197. 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
- }
@@ -1,10 +0,0 @@
1
- import { Query } from "@Typetron/Database";
2
- import { Seeder } from "@Typetron/Database/Seeders";
3
-
4
- export class RandomSeeder extends Seeder{
5
- public run(): void {
6
- Query.table('random_table').insertOne({
7
- col1: 'val1'
8
- })
9
- }
10
- }
@@ -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
- }
@@ -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
- }
@@ -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
- }
@@ -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
- }