diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index 8a64954..0000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,28 +0,0 @@ -# This file is a template, and might need editing before it works on your project. -# Official framework image. Look for the different tagged releases at: -# https://hub.docker.com/r/library/node/tags/ -image: node:latest - -# Pick zero or more services to be used on all builds. -# Only needed when using a docker container to run your tests in. -# Check out: http://docs.gitlab.com/ce/ci/docker/using_docker_images.html#what-is-service -services: - - mysql:latest - - redis:latest - - postgres:latest - -# This folder is cached between builds -# http://docs.gitlab.com/ce/ci/yaml/README.html#cache -cache: - paths: - - node_modules/ - -test_async: - script: - - npm install - - node ./specs/start.js ./specs/async.spec.js - -test_db: - script: - - npm install - - node ./specs/start.js ./specs/db-postgres.spec.js diff --git a/project-manager/angular-cli.json b/project-manager/angular-cli.json index 127bf3d..074fb1a 100644 --- a/project-manager/angular-cli.json +++ b/project-manager/angular-cli.json @@ -44,11 +44,6 @@ "config": "./protractor.conf.js" } }, - "test": { - "karma": { - "config": "./karma.conf.js" - } - }, "defaults": { "styleExt": "css", "prefixInterfaces": false, diff --git a/project-manager/e2e/dashboard/dashboard.e2e-spec.ts b/project-manager/e2e/dashboard/dashboard.e2e-spec.ts deleted file mode 100644 index 36222fa..0000000 --- a/project-manager/e2e/dashboard/dashboard.e2e-spec.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { browser, element, by } from 'protractor'; - -describe('Dashboard', function() { - - beforeEach(() => { - browser.get('/') - }); - - it('should display the correct heading', () => { - const heading = element(by.css('h1')).getText(); - const headings = element.all(by.css('h1')).getText(); - console.log(headings) - heading.then((headingText) => { - console.log(headingText); - }); - expect(heading).toEqual('Dashboard'); - expect(headings).toContain('Dashboard'); - }); - - it('should redirect to /dashboard', () => { - expect(browser.getCurrentUrl()).toContain('/dashboard'); - }); - -}); diff --git a/project-manager/e2e/helpers/take_screenshot.ts b/project-manager/e2e/helpers/take_screenshot.ts deleted file mode 100644 index c2c00c2..0000000 --- a/project-manager/e2e/helpers/take_screenshot.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { browser} from 'protractor'; -import * as fs from 'fs'; - -declare var Buffer, module: any; - -export function takeScreenshot(filename: string) { - return browser.takeScreenshot().then((data) => { - const stream = fs.createWriteStream(filename); - stream.write(new Buffer(data, 'base64')); - stream.end(); - }) -} \ No newline at end of file diff --git a/project-manager/e2e/tasks/edit-task.e2e-spec.ts b/project-manager/e2e/tasks/edit-task.e2e-spec.ts deleted file mode 100644 index 3a25155..0000000 --- a/project-manager/e2e/tasks/edit-task.e2e-spec.ts +++ /dev/null @@ -1,26 +0,0 @@ -import {takeScreenshot} from '../helpers/take_screenshot'; -import { browser } from 'protractor'; -import {EditTaskPage} from './edit-task.po'; - -describe('Edit Tasks', function() { - - let page: EditTaskPage; - beforeEach(() => { - page = new EditTaskPage(); - page.navigateToNewPage(); - }); - - it('should change page when accepting alert', () => { - page.fillForm('New Task', 'BACKLOG'); - page.cancel(); - page.getAlert().accept(); // Klick auf OK - expect(browser.getCurrentUrl()).not.toContain(page.newUrl); - }); - - it('should stay on page when discarding alert', () => { - page.fillForm('New Task', 'IN_PROGRESS'); - page.cancel(); - page.getAlert().dismiss(); // Klick auf Abbrechen - expect(browser.getCurrentUrl()).toContain(page.newUrl); - }); -}); \ No newline at end of file diff --git a/project-manager/e2e/tasks/edit-task.po.ts b/project-manager/e2e/tasks/edit-task.po.ts deleted file mode 100644 index a695a49..0000000 --- a/project-manager/e2e/tasks/edit-task.po.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { browser, element, by, protractor} from 'protractor'; - -export class EditTaskPage { - newUrl = '/tasks/new'; - navigateToNewPage() { - return browser.get(this.newUrl); - } - - navigateToEditPage(id: number) { - return browser.get(`tasks/edit/${id}`); - } - - fillForm(title: string, state: string) { - element(by.name('title')).sendKeys(title); - element(by.name('state')).element(by.css(`[value="${state}"]`)) - .click(); - //Firefox HACK: - browser.actions().sendKeys( protractor.Key.ENTER ).perform(); - } - - save() { - element(by.id('save')).click(); - } - - cancel() { - return element(by.id('cancel')).click(); - } - - getAlert() { - return browser.switchTo().alert(); - } - -} - diff --git a/project-manager/e2e/tasks/task-list-no-page-object.e2e-spec.ts b/project-manager/e2e/tasks/task-list-no-page-object.e2e-spec.ts deleted file mode 100644 index 1d104f4..0000000 --- a/project-manager/e2e/tasks/task-list-no-page-object.e2e-spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { browser, element, by } from 'protractor'; -import {takeScreenshot} from '../helpers/take_screenshot'; - -describe('Task List (without Page Object)', () => { - - beforeEach(() => { - browser.get('/tasks') - }); - - it('should allow searching for tasks', () => { - element(by.css('#search-tasks')).sendKeys('Ersten'); - browser.sleep(500); - const count = element.all(by.className('task-list-entry')).count(); - expect(count).toEqual(1); - }); - - it('should work with no search results', () => { - element(by.css('#search-tasks')).sendKeys('Ich existiere nicht'); - browser.sleep(500); - const count = element.all(by.className('task-list-entry')).count(); - expect(count).toEqual(0); - }); - - -}); diff --git a/project-manager/e2e/tasks/task-list.e2e-spec.ts b/project-manager/e2e/tasks/task-list.e2e-spec.ts deleted file mode 100644 index c24a8d0..0000000 --- a/project-manager/e2e/tasks/task-list.e2e-spec.ts +++ /dev/null @@ -1,54 +0,0 @@ - -import {takeScreenshot} from '../helpers/take_screenshot'; -import {TaskListPage} from './task-list.po'; -import { browser } from 'protractor'; - - -describe('TaskList', function () { - - let page: TaskListPage; - beforeEach(() => { - page = new TaskListPage(); - page.navigateTo(); - }); - - xit('should allow to create new tasks (forgot to press save)', () => { - - const editPage = page.gotoNewTaskView(); - editPage.fillForm('New Task', 'BACKLOG'); - // editPage.save(); - - expect(page.checkTaskDisplayed('New Task')).not.toBeNull(); - - }); - - it('should allow searching for tasks', () => { - page.searchForTasks('Ersten'); - expect(page.getTaskCount()).toEqual(1); - }); - - it('should work with no search results', () => { - page.searchForTasks('Ich existiere nicht.'); - expect(page.getTaskCount()).toEqual(0); - }); - - - it('should allow to create new tasks', () => { - const taskTitle = `New Task ${new Date().getTime()}`; - const editPage = page.gotoNewTaskView(); - editPage.fillForm(taskTitle, 'IN_PROGRESS'); - editPage.save(); - takeScreenshot('createTaskFailure.png'); - page.checkTaskDisplayed(taskTitle); - }); - - it('should add new tasks to the displayed list', () => { - page.getTaskCount().then(count => { - const editPage = page.gotoNewTaskView(); - editPage.fillForm('New Task', 'IN_PROGRESS'); - editPage.save(); - expect(page.getTaskCount()).toEqual(count + 1); - }); - }); - -}); diff --git a/project-manager/e2e/tasks/task-list.po.ts b/project-manager/e2e/tasks/task-list.po.ts deleted file mode 100644 index ef8d311..0000000 --- a/project-manager/e2e/tasks/task-list.po.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { browser, element, by} from 'protractor'; -import { ExpectedConditions as EC} from 'protractor'; -import {EditTaskPage} from './edit-task.po'; - -export class TaskListPage { - - navigateTo() { - return browser.get('/tasks'); - } - - searchForTasks(term: string) { - element(by.css('#search-tasks')).sendKeys(term); - browser.sleep(500); - } - - getTaskCount() { - return element.all(by.className('task-list-entry')).count(); - } - - gotoNewTaskView() { - element(by.linkText('Neue Aufgabe anlegen')).click(); - return new EditTaskPage(); - } - - checkTaskDisplayed(text: string) { - const taskLink = element(by.linkText(text)); - browser.wait(EC.presenceOf(taskLink), 10000); - return taskLink.isDisplayed(); - } - -} - diff --git a/project-manager/e2e/tsconfig.json b/project-manager/e2e/tsconfig.json deleted file mode 100644 index a372020..0000000 --- a/project-manager/e2e/tsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "compileOnSave": false, - "compilerOptions": { - "declaration": false, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "module": "commonjs", - "moduleResolution": "node", - "outDir": "../dist/out-tsc-e2e", - "sourceMap": true, - "target": "es5", - "typeRoots": [ - "../node_modules/@types" - ], - "types": [ - "jasmine", "node" - ] - } -} diff --git a/project-manager/karma.conf.js b/project-manager/karma.conf.js deleted file mode 100644 index a79edd1..0000000 --- a/project-manager/karma.conf.js +++ /dev/null @@ -1,44 +0,0 @@ -// Karma configuration file, see link for more information -// https://karma-runner.github.io/0.13/config/configuration-file.html - -module.exports = function (config) { - config.set({ - basePath: '', - frameworks: ['jasmine', 'angular-cli'], - plugins: [ - require('karma-jasmine'), - require('karma-chrome-launcher'), - require('karma-remap-istanbul'), - require('karma-spec-reporter'), - require('angular-cli/plugins/karma') - ], - files: [ - { pattern: './src/test.ts', watched: false } - ], - preprocessors: { - './src/test.ts': ['angular-cli'] - }, - mime: { - 'text/x-typescript': ['ts','tsx'] - }, - remapIstanbulReporter: { - reports: { - html: 'coverage', - lcovonly: './coverage/coverage.lcov' - } - }, - angularCli: { - config: './angular-cli.json', - environment: 'dev' - }, - reporters: config.angularCli && config.angularCli.codeCoverage - ? ['spec', 'karma-remap-istanbul'] - : ['spec'], - port: 9876, - colors: true, - logLevel: config.LOG_INFO, - autoWatch: true, - browsers: ['Chrome'], - singleRun: false - }); -}; diff --git a/project-manager/package.json b/project-manager/package.json index 3eac385..b1362e8 100644 --- a/project-manager/package.json +++ b/project-manager/package.json @@ -44,16 +44,6 @@ "@types/node": "^6.0.42", "angular-cli": "1.0.0-beta.25.5", "codelyzer": "~2.0.0-beta.1", - "jasmine-core": "2.5.2", - "jasmine-spec-reporter": "2.5.0", - "karma-spec-reporter": "0.0.26", - "karma": "1.2.0", - "karma-chrome-launcher": "^2.0.0", - "karma-cli": "^1.0.1", - "karma-jasmine": "^1.0.2", - "karma-remap-istanbul": "^0.2.1", - "protractor": "~4.0.13", - "protractor-jasmine2-screenshot-reporter": "^0.3.2", "ts-node": "1.2.1", "tslint": "^4.3.0", "typescript": "~2.0.3" diff --git a/project-manager/protractor.conf.js b/project-manager/protractor.conf.js deleted file mode 100644 index ffded70..0000000 --- a/project-manager/protractor.conf.js +++ /dev/null @@ -1,32 +0,0 @@ -// Protractor configuration file, see link for more information -// https://github.com/angular/protractor/blob/master/lib/config.ts - -/*global jasmine */ -var SpecReporter = require('jasmine-spec-reporter'); - -exports.config = { - allScriptsTimeout: 11000, - specs: [ - './e2e/**/*.e2e-spec.ts' - ], - capabilities: { - 'browserName': 'chrome' - }, - directConnect: true, - baseUrl: 'http://localhost:4200/', - framework: 'jasmine', - jasmineNodeOpts: { - showColors: true, - defaultTimeoutInterval: 30000, - print: function() {} - }, - useAllAngular2AppRoots: true, - beforeLaunch: function() { - require('ts-node').register({ - project: 'e2e' - }); - }, - onPrepare: function() { - jasmine.getEnv().addReporter(new SpecReporter()); - } -}; diff --git a/project-manager/src/app/models/app-validators.spec.ts b/project-manager/src/app/models/app-validators.spec.ts deleted file mode 100644 index 822bc65..0000000 --- a/project-manager/src/app/models/app-validators.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import {EmailValidatorDirective} from "./app-validators"; - - -describe('EMail-Validator', () => { - let validator = null; - beforeEach(() => { - validator = new EmailValidatorDirective(); - }); - - it('should accept valid email addresses', () => { - const control = {value: "foo@bar.com"}; - const result = validator.validate(control); - expect(result).toBe(null); - }); - it('should not accept invalid email addresses', () => { - const control = {value: "foobar.com"}; - const result = validator.validate(control); - expect(result['invalidEMail']).toBeTruthy(); - }); - it('should accept empty email addresses', () => { - const control = {value: ""}; - const result = validator.validate(control); - expect(result).toBeNull(); - }); -}); diff --git a/project-manager/src/app/services/task-service/task.service.spec.ts b/project-manager/src/app/services/task-service/task.service.spec.ts deleted file mode 100644 index 85a6bd9..0000000 --- a/project-manager/src/app/services/task-service/task.service.spec.ts +++ /dev/null @@ -1,90 +0,0 @@ -import {TestBed, inject, fakeAsync} from '@angular/core/testing'; -import { BaseRequestOptions, Http, ConnectionBackend, Response, ResponseOptions, RequestMethod } from '@angular/http'; -import {TaskService} from './task.service'; -import {MockBackend} from '@angular/http/testing/mock_backend'; -import {TaskStore} from '../stores/task.store'; -import {SOCKET_IO} from '../../app.tokens'; -import {mockIO} from '../../mocks/mock-socket'; - -describe('Task-Service', () => { - beforeEach(() => { - TestBed.configureTestingModule({ - providers: [ - TaskService, - TaskStore, - {provide: SOCKET_IO, useValue: mockIO}, - BaseRequestOptions, - MockBackend, - {provide: Http, useFactory: (mockBackend: ConnectionBackend, - defaultOptions: BaseRequestOptions) => { - return new Http(mockBackend, defaultOptions); - }, deps: [MockBackend, BaseRequestOptions]}, - ] - }); - }); - - let taskService: TaskService; - let taskStore: TaskStore; - let mockBackend: MockBackend; - - beforeEach(inject([TaskService, TaskStore, MockBackend], - (_taskService, _taskStore, _mockBackend) => { - taskService = _taskService; - taskStore = _taskStore; - mockBackend = _mockBackend; - }) - ); - - const saveTask = (task, expectedUrl = null, expectedMethod = null) => { - mockBackend.connections.subscribe(connection => { - if (expectedUrl) { - expect(connection.request.url).toBe(expectedUrl); - } - if (expectedMethod) { - expect(connection.request.method).toBe(expectedMethod); - } - const response = new ResponseOptions({body: JSON.stringify(task)}); - connection.mockRespond(new Response(response)); - }); - taskService.saveTask(task).subscribe(); - }; - - it('should trigger a HTTP-POST for new Tasks', (() => { - const task = {title: 'Task 1'}; - mockBackend.connections.subscribe(connection => { - const expectedUrl = 'http://localhost:3000/api/tasks/'; - expect(connection.request.url).toBe(expectedUrl); - expect(connection.request.method).toBe(RequestMethod.Post); - const response = new ResponseOptions({body: JSON.stringify(task)}); - connection.mockRespond(new Response(response)); - }); - taskService.saveTask(task).subscribe(); - })); - - it('should trigger a HTTP-POST for new Tasks', (() => { - const task = {title: 'Task 1'}; - saveTask(task, 'http://localhost:3000/api/tasks/', RequestMethod.Post); - })); - - it('should do a HTTP-Put for existing Tasks', (() => { - const task = {id: 1, title: 'Existing Task'}; - saveTask(task, 'http://localhost:3000/api/tasks/1', RequestMethod.Put); - })); - - it('should add the Task to the store', (() => { - const spy = spyOn(taskStore, 'dispatch').and.callThrough(); - saveTask({title: 'Task 1'}); - const dispatchedAction = spy.calls.mostRecent().args[0]; - expect(dispatchedAction.type).toEqual('ADD'); - expect(dispatchedAction.data.title).toEqual('Task 1'); - })); - - it('should save the Task in store', (() => { - const spy = spyOn(taskStore, 'dispatch').and.callThrough(); - saveTask({id: 1, title: 'Task 1'}); - const dispatchedAction = spy.calls.mostRecent().args[0]; - expect(dispatchedAction.type).toEqual('EDIT'); - expect(dispatchedAction.data.title).toEqual('Task 1'); - })); - -}); diff --git a/project-manager/src/app/show-error/show-error.component.spec.ts b/project-manager/src/app/show-error/show-error.component.spec.ts deleted file mode 100644 index 0471557..0000000 --- a/project-manager/src/app/show-error/show-error.component.spec.ts +++ /dev/null @@ -1,71 +0,0 @@ - -import {NgForm, FormsModule, ReactiveFormsModule} from '@angular/forms'; - - -import { - ComponentFixture -} from '@angular/core/testing' - -import {By} from '@angular/platform-browser'; -import {ShowErrorComponent} from './show-error.component'; -import {TestBed} from '@angular/core/testing'; - -export class FakeForm { - constructor(private control: any) { - } - - get(str: string) { - return this.control; - } -} - - - -describe('ShowError Component', () => { - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [FormsModule, ReactiveFormsModule], - declarations: [ShowErrorComponent], - providers: [NgForm] - }); - }); - - - let fixture: ComponentFixture; - - it('should display "required" error for touched controls', (done) => { - fixture = TestBed.createComponent(ShowErrorComponent); - fixture.whenStable().then(() => { - const showErrorCmp: ShowErrorComponent = fixture.componentInstance; - const element = fixture.nativeElement; - (showErrorCmp).form = new FakeForm({ - touched: true, - errors: { - required: true - } - }); - (showErrorCmp).displayName = 'Vorname'; - fixture.detectChanges(); //Change-Detection auslösen - expect(element.querySelector('.alert-danger').textContent) - .toContain('Vorname ist ein Pflichtfeld'); - done(); - }); - }); - - it('should display no errors for untouched controls', () => { - fixture = TestBed.createComponent(ShowErrorComponent); - - const showErrorCmp: ShowErrorComponent = fixture.componentInstance; - const fakeControl: any = {touched: false, errors: {required: true}}; - (showErrorCmp).form = new FakeForm(fakeControl); - fixture.detectChanges(); - expect(fixture.nativeElement.querySelector('.alert-danger')).toBeNull(); - expect(fixture.debugElement.query(By.css('.alert-danger'))).toBeNull(); - }); -}); - - - - - diff --git a/project-manager/src/app/tasks/edit-task/edit-task.component.spec.ts b/project-manager/src/app/tasks/edit-task/edit-task.component.spec.ts deleted file mode 100644 index 74746ae..0000000 --- a/project-manager/src/app/tasks/edit-task/edit-task.component.spec.ts +++ /dev/null @@ -1,100 +0,0 @@ -import {TaskService} from '../../services/task-service/task.service'; - -import {RouterTestingModule} from '@angular/router/testing'; - -import {BehaviorSubject} from 'rxjs/BehaviorSubject'; - -import {TestBed, inject} from '@angular/core/testing'; -import {EditTaskComponent} from './edit-task.component'; -import {ShowErrorComponent} from '../../show-error/show-error.component'; -import {APPLICATION_VALIDATORS} from '../../models/app-validators'; -import {ActivatedRoute, Router} from '@angular/router'; -import {fakeAsync, tick} from '@angular/core/testing/fake_async'; -import {Title} from '@angular/platform-browser'; -import {Component} from '@angular/core'; -import {ReactiveFormsModule, FormsModule} from '@angular/forms'; -import {MockTaskService} from '../../mocks/mock-task-service'; - -@Component({ - template: '' -}) -class TestComponent { -} - -describe('EditTask Component', () => { - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [FormsModule, RouterTestingModule.withRoutes([ - {path: 'new', component: EditTaskComponent}, - {path: 'edit/:id', component: EditTaskComponent} - ], - )], - declarations: [EditTaskComponent, ShowErrorComponent, APPLICATION_VALIDATORS, TestComponent], - providers: [ - Title, - {provide: TaskService, useClass: MockTaskService}, - ] - }); - }); - - let taskService: TaskService; - beforeEach(inject([TaskService], (_taskService) => { - taskService = _taskService; - })); - - it('should load the correct task in Edit-Mode', fakeAsync(() => { - const fixture = TestBed.createComponent(EditTaskComponent); - const route = TestBed.get(ActivatedRoute); - (route.params).next({id: '42'}); - - const element = fixture.nativeElement; - - const spy = spyOn(taskService, 'getTask'); - const fakeTask = {title: 'Task1', assignee: {name: 'John'}}; - spy.and.returnValue(new BehaviorSubject(fakeTask)); - - fixture.autoDetectChanges(true); - fixture.whenStable().then(() => { - tick(); - expect(spy).toHaveBeenCalledWith('42'); - const titleInput = element.querySelector('#title'); - expect(titleInput.value).toBe(fakeTask.title); - - const assigneeInput = element.querySelector('#assignee_name'); - expect(assigneeInput.value).toBe(fakeTask.assignee.name); - }); - })); - - - it('should load the correct task (with router)', fakeAsync(() => { - const fixture = TestBed.createComponent(TestComponent); - const router = TestBed.get(Router); - router.navigateByUrl('edit/42'); - - const spy = spyOn(taskService, 'getTask'); - const fakeTask = {title: 'Task1', assignee: {name: 'John'}}; - spy.and.returnValue(new BehaviorSubject(fakeTask)); - fixture.whenStable().then(() => { - tick(); - expect(spy).toHaveBeenCalledWith('42'); - const titleInput = fixture.nativeElement.querySelector('#title'); - expect(titleInput.value).toBe(fakeTask.title); - }); - })); - - it('should work without passing URL-Parameter', fakeAsync(() => { - const fixture = TestBed.createComponent(TestComponent); - const router = TestBed.get(Router); - router.navigateByUrl('new'); - const spy = spyOn(taskService, 'getTask'); - fixture.whenStable().then(() => { - tick(); - expect(spy).not.toHaveBeenCalled(); - const titleInput = fixture.nativeElement.querySelector('#title'); - expect(titleInput.value).toBe(''); - }); - })); - - -}); diff --git a/project-manager/src/app/tasks/task-list/task-list.component.spec.ts b/project-manager/src/app/tasks/task-list/task-list.component.spec.ts deleted file mode 100644 index 37a1015..0000000 --- a/project-manager/src/app/tasks/task-list/task-list.component.spec.ts +++ /dev/null @@ -1,88 +0,0 @@ -import {TaskService} from '../../services/task-service/task.service'; - -import {RouterTestingModule} from '@angular/router/testing'; - -import {BehaviorSubject} from 'rxjs/BehaviorSubject'; - -import {TestBed, inject, fakeAsync, tick} from '@angular/core/testing'; -import {TaskItemComponent} from './task-item.component'; -import {TaskListComponent} from './task-list.component'; -import {ReactiveFormsModule} from '@angular/forms'; -import {MockTaskService} from '../../mocks/mock-task-service'; -import {setInputValue} from '../../testing/test-helper'; - -jasmine.DEFAULT_TIMEOUT_INTERVAL = 4000; - -describe('TaskList Component', () => { - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [ReactiveFormsModule, RouterTestingModule.withRoutes([])], - declarations: [TaskListComponent, TaskItemComponent], - providers: [ - {provide: TaskService, useClass: MockTaskService}, - ] - }); - }); - - let taskService: TaskService; - beforeEach(inject([TaskService], (_taskService: TaskService) => { - taskService = _taskService; - })); - - it('should display TaskItems in the List', () => { - const fixture = TestBed.createComponent(TaskListComponent); - const element = fixture.nativeElement; - - (>taskService.tasks$).next([ - {id: 1, title: 'Task1', description: 'Hello Karma'}, - {id: 2, title: 'Task2', description: 'Hello Jasmine'} - ]); - - fixture.detectChanges(); //trigger change detection - - expect(element.querySelectorAll('.task-list-entry').length).toBe(2); - expect(element.querySelector('.task-list-entry').textContent) - .toContain('Hello Karma'); - }); - - it('should display TaskItems in the List (with TestBed.get)', () => { - const fixture = TestBed.createComponent(TaskListComponent); - const taskService = TestBed.get(TaskService); - const element = fixture.nativeElement; - - (>taskService.tasks$).next([ - {id: 1, title: 'Task1', description: 'Hello Karma'}, - {id: 2, title: 'Task2', description: 'Hello Jasmine'} - ]); - - fixture.detectChanges(); //trigger change detection - - expect(element.querySelectorAll('.task-list-entry').length).toBe(2); - expect(element.querySelector('.task-list-entry').textContent) - .toContain('Hello Karma'); - }); - - it('should call deleteTask when clicking the trash-bin', fakeAsync(() => { - const fixture = TestBed.createComponent(TaskListComponent); - - // Task-Liste füllen - const task = {id: 42, title: 'Task 1'}; - (>taskService.tasks$).next([task]); - fixture.detectChanges(); //trigger change detection - - // Spy programmieren - const spy = spyOn(taskService, 'deleteTask'); - spy.and.returnValue(new BehaviorSubject({})); - - // Task löschen - const trash = fixture.nativeElement.querySelector('.glyphicon-trash'); - trash.click(); - - // Spy auswerten - const deleteArguments = spy.calls.mostRecent().args; - expect(deleteArguments[0]).toBe(task); - expect(taskService.deleteTask).toHaveBeenCalledWith(task); - })); - -}); diff --git a/project-manager/src/app/testing/test-helper.ts b/project-manager/src/app/testing/test-helper.ts deleted file mode 100644 index f5ac2fa..0000000 --- a/project-manager/src/app/testing/test-helper.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter'; - -export function dispatchEvent(element: any, eventType: any) { - getDOM().dispatchEvent(element, getDOM().createEvent(eventType)); -} - -export function setInputValue(input: any, value: any) { - input.value = value; - dispatchEvent(input, 'input'); - dispatchEvent(input, 'blur'); -} \ No newline at end of file diff --git a/project-manager/src/test.ts b/project-manager/src/test.ts deleted file mode 100644 index abce206..0000000 --- a/project-manager/src/test.ts +++ /dev/null @@ -1,34 +0,0 @@ -import './polyfills.ts'; - -import 'zone.js/dist/long-stack-trace-zone'; -import 'zone.js/dist/proxy.js'; -import 'zone.js/dist/sync-test'; -import 'zone.js/dist/jasmine-patch'; -import 'zone.js/dist/async-test'; -import 'zone.js/dist/fake-async-test'; -import { getTestBed } from '@angular/core/testing'; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting -} from '@angular/platform-browser-dynamic/testing'; -import 'rxjs/Rx'; - - -// Unfortunately there's no typing for the `__karma__` variable. Just declare it as any. -declare var __karma__: any; -declare var require: any; - -// Prevent Karma from running prematurely. -__karma__.loaded = function () {}; - -// First, initialize the Angular testing environment. -getTestBed().initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting() -); -// Then we find all the tests. -const context = require.context('./', true, /\.spec\.ts$/); -// And load the modules. -context.keys().map(context); -// Finally, start Karma to run the tests. -__karma__.start();