From 8a955d02e43a5e8dbe8a2c3b9290cd3d4e147bc9 Mon Sep 17 00:00:00 2001 From: sagely1 <114952739+sagely1@users.noreply.github.com> Date: Tue, 24 Sep 2024 21:11:27 +0000 Subject: [PATCH 1/2] adding news component, code cleanup --- apps/agora/app/src/app/app.routes.ts | 4 ++ libs/agora/news/.eslintrc.json | 40 +++++++++++++++++++ libs/agora/news/.hintrc | 3 ++ libs/agora/news/README.md | 7 ++++ libs/agora/news/jest.config.ts | 23 +++++++++++ libs/agora/news/project.json | 35 ++++++++++++++++ libs/agora/news/src/index.ts | 1 + libs/agora/news/src/lib/news.component.html | 16 ++++++++ libs/agora/news/src/lib/news.component.scss | 25 ++++++++++++ .../agora/news/src/lib/news.component.spec.ts | 28 +++++++++++++ libs/agora/news/src/lib/news.component.ts | 15 +++++++ libs/agora/news/src/lib/news.routes.ts | 4 ++ libs/agora/news/src/test-setup.ts | 1 + libs/agora/news/tsconfig.json | 28 +++++++++++++ libs/agora/news/tsconfig.lib.json | 12 ++++++ libs/agora/news/tsconfig.spec.json | 11 +++++ libs/agora/teams/src/index.ts | 1 + .../src/lib/teams/teams.component.spec.ts | 4 +- libs/agora/testing/src/lib/node.ts | 5 --- libs/agora/testing/src/lib/server/index.ts | 1 + .../testing/src/lib/server/msw-server.ts | 5 +++ .../agora/wiki/src/lib/wiki.component.spec.ts | 2 +- libs/agora/wiki/src/test-setup.ts | 2 +- tsconfig.base.json | 4 +- 24 files changed, 267 insertions(+), 10 deletions(-) create mode 100644 libs/agora/news/.eslintrc.json create mode 100644 libs/agora/news/.hintrc create mode 100644 libs/agora/news/README.md create mode 100644 libs/agora/news/jest.config.ts create mode 100644 libs/agora/news/project.json create mode 100644 libs/agora/news/src/index.ts create mode 100644 libs/agora/news/src/lib/news.component.html create mode 100644 libs/agora/news/src/lib/news.component.scss create mode 100644 libs/agora/news/src/lib/news.component.spec.ts create mode 100644 libs/agora/news/src/lib/news.component.ts create mode 100644 libs/agora/news/src/lib/news.routes.ts create mode 100644 libs/agora/news/src/test-setup.ts create mode 100644 libs/agora/news/tsconfig.json create mode 100644 libs/agora/news/tsconfig.lib.json create mode 100644 libs/agora/news/tsconfig.spec.json delete mode 100644 libs/agora/testing/src/lib/node.ts create mode 100644 libs/agora/testing/src/lib/server/index.ts create mode 100644 libs/agora/testing/src/lib/server/msw-server.ts diff --git a/apps/agora/app/src/app/app.routes.ts b/apps/agora/app/src/app/app.routes.ts index 0f1f9e3395..31179cb8f8 100644 --- a/apps/agora/app/src/app/app.routes.ts +++ b/apps/agora/app/src/app/app.routes.ts @@ -5,6 +5,10 @@ export const routes: Route[] = [ path: 'about', loadChildren: () => import('@sagebionetworks/agora/about').then((routes) => routes.routes), }, + { + path: 'news', + loadChildren: () => import('@sagebionetworks/agora/news').then((routes) => routes.routes), + }, { path: 'not-found', loadChildren: () => import('@sagebionetworks/agora/not-found').then((routes) => routes.routes), diff --git a/libs/agora/news/.eslintrc.json b/libs/agora/news/.eslintrc.json new file mode 100644 index 0000000000..5d8c12012f --- /dev/null +++ b/libs/agora/news/.eslintrc.json @@ -0,0 +1,40 @@ +{ + "extends": ["../../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "env": { + "jest": true + }, + "overrides": [ + { + "files": ["*.ts"], + "extends": [ + "plugin:@nx/angular", + "plugin:@angular-eslint/template/process-inline-templates", + "plugin:jest/recommended" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "agora", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "agora", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nx/angular-template"], + "rules": {} + } + ] +} diff --git a/libs/agora/news/.hintrc b/libs/agora/news/.hintrc new file mode 100644 index 0000000000..5a7c9a85e6 --- /dev/null +++ b/libs/agora/news/.hintrc @@ -0,0 +1,3 @@ +{ + "extends": ["../../../.hintrc"] +} \ No newline at end of file diff --git a/libs/agora/news/README.md b/libs/agora/news/README.md new file mode 100644 index 0000000000..703262fa03 --- /dev/null +++ b/libs/agora/news/README.md @@ -0,0 +1,7 @@ +# agora-news + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test agora-news` to execute the unit tests. diff --git a/libs/agora/news/jest.config.ts b/libs/agora/news/jest.config.ts new file mode 100644 index 0000000000..3fa67010ad --- /dev/null +++ b/libs/agora/news/jest.config.ts @@ -0,0 +1,23 @@ +/* eslint-disable */ +export default { + displayName: 'agora-news', + preset: '../../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + globals: {}, + coverageDirectory: '../../../coverage/libs/agora/news', + transform: { + '^.+\\.(ts|mjs|js|html)$': [ + 'jest-preset-angular', + { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + ], + }, + transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/libs/agora/news/project.json b/libs/agora/news/project.json new file mode 100644 index 0000000000..10ea8cab11 --- /dev/null +++ b/libs/agora/news/project.json @@ -0,0 +1,35 @@ +{ + "name": "agora-news", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "libs/agora/news/src", + "prefix": "agora", + "targets": { + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/libs/agora/news"], + "options": { + "jestConfig": "libs/agora/news/jest.config.ts" + } + }, + "lint": { + "executor": "@nx/eslint:lint" + }, + "lint-fix": { + "executor": "@nx/eslint:lint", + "options": { + "fix": true + } + }, + "lint-html": { + "executor": "nx:run-commands", + "options": { + "commands": ["hint src/**/*.html"], + "cwd": "libs/agora/news", + "parallel": false + } + } + }, + "tags": ["type:feature", "scope:agora", "language:typescript"], + "implicitDependencies": [] +} diff --git a/libs/agora/news/src/index.ts b/libs/agora/news/src/index.ts new file mode 100644 index 0000000000..a9f78455b9 --- /dev/null +++ b/libs/agora/news/src/index.ts @@ -0,0 +1 @@ +export * from './lib/news.routes'; diff --git a/libs/agora/news/src/lib/news.component.html b/libs/agora/news/src/lib/news.component.html new file mode 100644 index 0000000000..f12416bcdf --- /dev/null +++ b/libs/agora/news/src/lib/news.component.html @@ -0,0 +1,16 @@ +
+
+
+

Agora News

+
+
+
+ +
+
+
+

What’s New in Agora

+ +
+
+
diff --git a/libs/agora/news/src/lib/news.component.scss b/libs/agora/news/src/lib/news.component.scss new file mode 100644 index 0000000000..60202cb9cd --- /dev/null +++ b/libs/agora/news/src/lib/news.component.scss @@ -0,0 +1,25 @@ +@import 'libs/agora/styles/src/lib/variables'; +@import 'libs/agora/styles/src/lib/mixins'; + +.news-page-content { + h3 { + font-size: var(--font-size-md); + font-weight: 700; + line-height: var(--line-height-md); + color: var(--color-secondary); + margin-bottom: 0; + + &:not(:first-child) { + border-top: 1px solid var(--color-separator); + padding-top: var(--spacing-xl); + margin-top: var(--spacing-xl); + } + } + + h4 { + font-size: var(--font-size-h3); + line-height: var(--line-height-h3); + margin-top: var(--spacing-lg); + margin-bottom: var(--spacing-lg); + } +} diff --git a/libs/agora/news/src/lib/news.component.spec.ts b/libs/agora/news/src/lib/news.component.spec.ts new file mode 100644 index 0000000000..1ca087b146 --- /dev/null +++ b/libs/agora/news/src/lib/news.component.spec.ts @@ -0,0 +1,28 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { NewsComponent } from './news.component'; +import { provideHttpClient } from '@angular/common/http'; + +describe('NewsComponent', () => { + let component: NewsComponent; + let fixture: ComponentFixture; + let element: HTMLElement; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [], + providers: [provideHttpClient()], + }).compileComponents(); + + fixture = TestBed.createComponent(NewsComponent); + component = fixture.componentInstance; + element = fixture.nativeElement; + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should have wiki component', () => { + expect(element.querySelector('agora-wiki')).toBeTruthy(); + }); +}); diff --git a/libs/agora/news/src/lib/news.component.ts b/libs/agora/news/src/lib/news.component.ts new file mode 100644 index 0000000000..8ed4bda939 --- /dev/null +++ b/libs/agora/news/src/lib/news.component.ts @@ -0,0 +1,15 @@ +import { CommonModule } from '@angular/common'; +import { Component } from '@angular/core'; +import { WikiComponent } from 'libs/agora/wiki/src/lib/wiki.component'; + +@Component({ + selector: 'agora-news', + standalone: true, + imports: [CommonModule, WikiComponent], + templateUrl: './news.component.html', + styleUrls: ['./news.component.scss'], +}) +export class NewsComponent { + wikiId = '611426'; + className = 'news-page-content'; +} diff --git a/libs/agora/news/src/lib/news.routes.ts b/libs/agora/news/src/lib/news.routes.ts new file mode 100644 index 0000000000..9bd3d002c5 --- /dev/null +++ b/libs/agora/news/src/lib/news.routes.ts @@ -0,0 +1,4 @@ +import { Routes } from '@angular/router'; +import { NewsComponent } from './news.component'; + +export const routes: Routes = [{ path: '', component: NewsComponent }]; diff --git a/libs/agora/news/src/test-setup.ts b/libs/agora/news/src/test-setup.ts new file mode 100644 index 0000000000..1100b3e8a6 --- /dev/null +++ b/libs/agora/news/src/test-setup.ts @@ -0,0 +1 @@ +import 'jest-preset-angular/setup-jest'; diff --git a/libs/agora/news/tsconfig.json b/libs/agora/news/tsconfig.json new file mode 100644 index 0000000000..f2860a9cd7 --- /dev/null +++ b/libs/agora/news/tsconfig.json @@ -0,0 +1,28 @@ +{ + "extends": "../../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "target": "es2020", + "esModuleInterop": true + }, + "angularCompilerOptions": { + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/libs/agora/news/tsconfig.lib.json b/libs/agora/news/tsconfig.lib.json new file mode 100644 index 0000000000..b228a1a081 --- /dev/null +++ b/libs/agora/news/tsconfig.lib.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": ["src/test-setup.ts", "**/*.spec.ts", "**/*.test.ts", "jest.config.ts"], + "include": ["**/*.ts"] +} diff --git a/libs/agora/news/tsconfig.spec.json b/libs/agora/news/tsconfig.spec.json new file mode 100644 index 0000000000..317e26be1d --- /dev/null +++ b/libs/agora/news/tsconfig.spec.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "target": "es2016", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts", "jest.config.ts"] +} diff --git a/libs/agora/teams/src/index.ts b/libs/agora/teams/src/index.ts index 4e6569bb98..1abbe96423 100644 --- a/libs/agora/teams/src/index.ts +++ b/libs/agora/teams/src/index.ts @@ -1,2 +1,3 @@ export * from './lib/teams/teams.routes'; export * from './lib/team-list/team-list.routes'; +export * from './lib/team-member-list/team-member-list.routes'; diff --git a/libs/agora/teams/src/lib/teams/teams.component.spec.ts b/libs/agora/teams/src/lib/teams/teams.component.spec.ts index e09cc21738..4186369326 100644 --- a/libs/agora/teams/src/lib/teams/teams.component.spec.ts +++ b/libs/agora/teams/src/lib/teams/teams.component.spec.ts @@ -6,8 +6,8 @@ describe('TeamListComponent', () => { let component: TeamsComponent; let fixture: ComponentFixture; - beforeEach(async () => { - await TestBed.configureTestingModule({ + beforeEach(() => { + TestBed.configureTestingModule({ imports: [], providers: [provideHttpClient()], }).compileComponents(); diff --git a/libs/agora/testing/src/lib/node.ts b/libs/agora/testing/src/lib/node.ts deleted file mode 100644 index 318554a2ff..0000000000 --- a/libs/agora/testing/src/lib/node.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { setupServer } from 'msw/node'; -import { synapseHandlers } from './handlers/synapse-handlers'; -import { teamHandlers } from './handlers/team-handlers'; - -export const server = setupServer(...teamHandlers, ...synapseHandlers); diff --git a/libs/agora/testing/src/lib/server/index.ts b/libs/agora/testing/src/lib/server/index.ts new file mode 100644 index 0000000000..dd649f4a22 --- /dev/null +++ b/libs/agora/testing/src/lib/server/index.ts @@ -0,0 +1 @@ +export * from './msw-server'; diff --git a/libs/agora/testing/src/lib/server/msw-server.ts b/libs/agora/testing/src/lib/server/msw-server.ts new file mode 100644 index 0000000000..bd335ca598 --- /dev/null +++ b/libs/agora/testing/src/lib/server/msw-server.ts @@ -0,0 +1,5 @@ +import { setupServer } from 'msw/node'; +import { synapseHandlers } from '../handlers/synapse-handlers'; +import { teamHandlers } from '../handlers/team-handlers'; + +export const server = setupServer(...teamHandlers, ...synapseHandlers); diff --git a/libs/agora/wiki/src/lib/wiki.component.spec.ts b/libs/agora/wiki/src/lib/wiki.component.spec.ts index 86f1023fe9..71cdfd15f5 100644 --- a/libs/agora/wiki/src/lib/wiki.component.spec.ts +++ b/libs/agora/wiki/src/lib/wiki.component.spec.ts @@ -1,7 +1,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { WikiComponent } from './wiki.component'; import { provideHttpClient } from '@angular/common/http'; -import { server } from 'libs/agora/testing/src/lib/node'; +import { server } from 'libs/agora/testing/src/lib/server/msw-server'; import { synapseWikiMock } from '@sagebionetworks/agora/testing/mocks'; import { http, HttpResponse } from 'msw'; diff --git a/libs/agora/wiki/src/test-setup.ts b/libs/agora/wiki/src/test-setup.ts index 1dc9aeca25..50dec7b2d6 100644 --- a/libs/agora/wiki/src/test-setup.ts +++ b/libs/agora/wiki/src/test-setup.ts @@ -1,6 +1,6 @@ import 'jest-preset-angular/setup-jest'; -import { server } from 'libs/agora/testing/src/lib/node'; +import { server } from '@sagebionetworks/agora/testing/server'; beforeAll(() => { // Enable API mocking before all the tests. diff --git a/tsconfig.base.json b/tsconfig.base.json index 29f4a4c30e..ad9faa5dc5 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -21,10 +21,12 @@ "@sagebionetworks/agora/api-client-angular": ["libs/agora/api-client-angular/src/index.ts"], "@sagebionetworks/agora/config": ["libs/agora/config/src/index.ts"], "@sagebionetworks/agora/models": ["libs/agora/models/index.ts"], + "@sagebionetworks/agora/news": ["libs/agora/news/src/index.ts"], "@sagebionetworks/agora/not-found": ["libs/agora/not-found/src/index.ts"], "@sagebionetworks/agora/services": ["libs/agora/services/src/index.ts"], "@sagebionetworks/agora/teams": ["libs/agora/teams/src/index.ts"], - "@sagebionetworks/agora/testing/mocks": ["libs/agora/testing/src/lib/mocks"], + "@sagebionetworks/agora/testing/mocks": ["libs/agora/testing/src/lib/mocks/index.ts"], + "@sagebionetworks/agora/testing/server": ["libs/agora/testing/src/lib/server/index.ts"], "@sagebionetworks/agora/ui": ["libs/agora/ui/src/index.ts"], "@sagebionetworks/agora/util": ["libs/agora/util/src/index.ts"], "@sagebionetworks/model-ad/api-client-angular": [ From fedd2147805a911165ae5032e600e53c942f951c Mon Sep 17 00:00:00 2001 From: sagely1 <114952739+sagely1@users.noreply.github.com> Date: Tue, 24 Sep 2024 22:38:40 +0000 Subject: [PATCH 2/2] code cleanup --- libs/agora/testing/src/index.ts | 3 +++ libs/agora/testing/src/lib/handlers/index.ts | 2 ++ libs/agora/wiki/src/lib/wiki.component.spec.ts | 2 +- libs/agora/wiki/src/test-setup.ts | 2 +- tsconfig.base.json | 3 +-- 5 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 libs/agora/testing/src/index.ts create mode 100644 libs/agora/testing/src/lib/handlers/index.ts diff --git a/libs/agora/testing/src/index.ts b/libs/agora/testing/src/index.ts new file mode 100644 index 0000000000..009a47feb7 --- /dev/null +++ b/libs/agora/testing/src/index.ts @@ -0,0 +1,3 @@ +export * from './lib/handlers'; +export * from './lib/mocks'; +export * from './lib/server'; diff --git a/libs/agora/testing/src/lib/handlers/index.ts b/libs/agora/testing/src/lib/handlers/index.ts new file mode 100644 index 0000000000..8ff15ae481 --- /dev/null +++ b/libs/agora/testing/src/lib/handlers/index.ts @@ -0,0 +1,2 @@ +export * from './synapse-handlers'; +export * from './team-handlers'; diff --git a/libs/agora/wiki/src/lib/wiki.component.spec.ts b/libs/agora/wiki/src/lib/wiki.component.spec.ts index 71cdfd15f5..a454f0c4d0 100644 --- a/libs/agora/wiki/src/lib/wiki.component.spec.ts +++ b/libs/agora/wiki/src/lib/wiki.component.spec.ts @@ -2,7 +2,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { WikiComponent } from './wiki.component'; import { provideHttpClient } from '@angular/common/http'; import { server } from 'libs/agora/testing/src/lib/server/msw-server'; -import { synapseWikiMock } from '@sagebionetworks/agora/testing/mocks'; +import { synapseWikiMock } from '@sagebionetworks/agora/testing'; import { http, HttpResponse } from 'msw'; describe('WikiComponent', () => { diff --git a/libs/agora/wiki/src/test-setup.ts b/libs/agora/wiki/src/test-setup.ts index 50dec7b2d6..7f54d0e166 100644 --- a/libs/agora/wiki/src/test-setup.ts +++ b/libs/agora/wiki/src/test-setup.ts @@ -1,6 +1,6 @@ import 'jest-preset-angular/setup-jest'; -import { server } from '@sagebionetworks/agora/testing/server'; +import { server } from '@sagebionetworks/agora/testing'; beforeAll(() => { // Enable API mocking before all the tests. diff --git a/tsconfig.base.json b/tsconfig.base.json index ad9faa5dc5..299b525047 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -25,8 +25,7 @@ "@sagebionetworks/agora/not-found": ["libs/agora/not-found/src/index.ts"], "@sagebionetworks/agora/services": ["libs/agora/services/src/index.ts"], "@sagebionetworks/agora/teams": ["libs/agora/teams/src/index.ts"], - "@sagebionetworks/agora/testing/mocks": ["libs/agora/testing/src/lib/mocks/index.ts"], - "@sagebionetworks/agora/testing/server": ["libs/agora/testing/src/lib/server/index.ts"], + "@sagebionetworks/agora/testing": ["libs/agora/testing/src/index.ts"], "@sagebionetworks/agora/ui": ["libs/agora/ui/src/index.ts"], "@sagebionetworks/agora/util": ["libs/agora/util/src/index.ts"], "@sagebionetworks/model-ad/api-client-angular": [