Skip to content

Commit

Permalink
refactor(TeacherProjectService): Extract RemoveNodeIdFromTransitionsS…
Browse files Browse the repository at this point in the history
…ervice (#1914)
  • Loading branch information
hirokiterashima authored Aug 22, 2024
1 parent ca85fa4 commit 2560488
Show file tree
Hide file tree
Showing 15 changed files with 591 additions and 511 deletions.
14 changes: 11 additions & 3 deletions src/app/services/deleteNodeService.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { TeacherProjectService } from '../../assets/wise5/services/teacherProjec
import { StudentTeacherCommonServicesModule } from '../student-teacher-common-services.module';
import demoProjectJSON_import from './sampleData/curriculum/Demo.project.json';
import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
import { RemoveNodeIdFromTransitionsService } from '../../assets/wise5/services/removeNodeIdFromTransitionsService';

let demoProjectJSON: any;
let projectService: TeacherProjectService;
Expand All @@ -15,9 +16,16 @@ let service: DeleteNodeService;
describe('DeleteNodeService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [StudentTeacherCommonServicesModule],
providers: [CopyNodesService, DeleteNodeService, TeacherProjectService, provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting()]
});
imports: [StudentTeacherCommonServicesModule],
providers: [
CopyNodesService,
DeleteNodeService,
RemoveNodeIdFromTransitionsService,
TeacherProjectService,
provideHttpClient(withInterceptorsFromDi()),
provideHttpClientTesting()
]
});
demoProjectJSON = copy(demoProjectJSON_import);
projectService = TestBed.inject(TeacherProjectService);
service = TestBed.inject(DeleteNodeService);
Expand Down
13 changes: 10 additions & 3 deletions src/app/services/moveNodesService.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { MoveNodesService } from '../../assets/wise5/services/moveNodesService';
import { copy } from '../../assets/wise5/common/object/object';
import demoProjectJSON_import from './sampleData/curriculum/Demo.project.json';
import { TeacherProjectService } from '../../assets/wise5/services/teacherProjectService';
import { RemoveNodeIdFromTransitionsService } from '../../assets/wise5/services/removeNodeIdFromTransitionsService';
import { StudentTeacherCommonServicesModule } from '../student-teacher-common-services.module';
import { provideHttpClientTesting } from '@angular/common/http/testing';
import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
Expand All @@ -16,9 +17,15 @@ let teacherProjectService: TeacherProjectService;
describe('MoveNodesService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [StudentTeacherCommonServicesModule],
providers: [MoveNodesService, TeacherProjectService, provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting()]
});
imports: [StudentTeacherCommonServicesModule],
providers: [
MoveNodesService,
RemoveNodeIdFromTransitionsService,
TeacherProjectService,
provideHttpClient(withInterceptorsFromDi()),
provideHttpClientTesting()
]
});
service = TestBed.inject(MoveNodesService);
demoProjectJSON = copy(demoProjectJSON_import);
teacherProjectService = TestBed.inject(TeacherProjectService);
Expand Down
7 changes: 3 additions & 4 deletions src/app/services/projectService.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@ let twoLessonsProjectJSON: any;
describe('ProjectService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [StudentTeacherCommonServicesModule],
providers: [provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting()]
});
imports: [StudentTeacherCommonServicesModule],
providers: [provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting()]
});
http = TestBed.inject(HttpTestingController);
configService = TestBed.inject(ConfigService);
service = TestBed.inject(ProjectService);
Expand Down Expand Up @@ -89,7 +89,6 @@ describe('ProjectService', () => {
// MARK: Tests for Node and Group Id functions
// TODO: add test for service.getNodePositionAndTitle()
// TODO: add test for service.deconsteNode()
// TODO: add test for service.removeNodeIdFromTransitions()
// TODO: add test for service.removeNodeIdFromGroups()
// TODO: add test for service.createComponent()
// TODO: add test for service.addComponentToNode()
Expand Down
38 changes: 38 additions & 0 deletions src/app/services/removeNodeIdFromTransitionsService.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import { TestBed } from '@angular/core/testing';
import { StudentTeacherCommonServicesModule } from '../student-teacher-common-services.module';
import { TeacherProjectService } from '../../assets/wise5/services/teacherProjectService';
import { RemoveNodeIdFromTransitionsService } from '../../assets/wise5/services/removeNodeIdFromTransitionsService';
import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
import demoProjectJSON_import from './sampleData/curriculum/Demo.project.json';
import { copy } from '../../assets/wise5/common/object/object';

let demoProjectJSON: any;
let projectService: TeacherProjectService;
let service: RemoveNodeIdFromTransitionsService;
describe('RemoveNodeIdFromTransitionsService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [StudentTeacherCommonServicesModule],
providers: [
RemoveNodeIdFromTransitionsService,
TeacherProjectService,
provideHttpClient(withInterceptorsFromDi())
]
});
demoProjectJSON = copy(demoProjectJSON_import);
projectService = TestBed.inject(TeacherProjectService);
service = TestBed.inject(RemoveNodeIdFromTransitionsService);
});
shouldRemoveTransitionsGoingOutOfGroupInChildNodesOfGroup();
});

function shouldRemoveTransitionsGoingOutOfGroupInChildNodesOfGroup() {
it('should remove transitions going out of group in child nodes of group', () => {
projectService.setProject(demoProjectJSON);
expect(projectService.getTransitionsByFromNodeId('node18').length).toEqual(1);
expect(projectService.getTransitionsByFromNodeId('node19').length).toEqual(1);
service.removeTransitionsOutOfGroup('group1');
expect(projectService.getTransitionsByFromNodeId('node18').length).toEqual(1);
expect(projectService.getTransitionsByFromNodeId('node19').length).toEqual(0);
});
}
14 changes: 2 additions & 12 deletions src/app/services/teacherProjectService.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { StudentTeacherCommonServicesModule } from '../student-teacher-common-se
import { copy } from '../../assets/wise5/common/object/object';
import { DeleteNodeService } from '../../assets/wise5/services/deleteNodeService';
import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
import { RemoveNodeIdFromTransitionsService } from '../../assets/wise5/services/removeNodeIdFromTransitionsService';
let service: TeacherProjectService;
let configService: ConfigService;
let deleteNodeService: DeleteNodeService;
Expand All @@ -31,6 +32,7 @@ describe('TeacherProjectService', () => {
imports: [StudentTeacherCommonServicesModule],
providers: [
DeleteNodeService,
RemoveNodeIdFromTransitionsService,
TeacherProjectService,
provideHttpClient(withInterceptorsFromDi()),
provideHttpClientTesting()
Expand Down Expand Up @@ -62,7 +64,6 @@ describe('TeacherProjectService', () => {
shouldNotAddSpaceIfItDoesExist();
shouldAddSpaceIfItDoesntExist();
shouldRemoveSpaces();
shouldRemoveTransitionsGoingOutOfGroupInChildNodesOfGroup();
removeNodeFromGroup();
insertNodeAfterInTransitions();
shouldNotBeAbleToInsertANodeAfterAnotherNodeWhenTheyAreDifferentTypes();
Expand Down Expand Up @@ -315,17 +316,6 @@ function shouldRemoveSpaces() {
});
}

function shouldRemoveTransitionsGoingOutOfGroupInChildNodesOfGroup() {
it('should remove transitions going out of group in child nodes of group', () => {
service.setProject(demoProjectJSON);
expect(service.getTransitionsByFromNodeId('node18').length).toEqual(1);
expect(service.getTransitionsByFromNodeId('node19').length).toEqual(1);
service.removeTransitionsOutOfGroup('group1');
expect(service.getTransitionsByFromNodeId('node18').length).toEqual(1);
expect(service.getTransitionsByFromNodeId('node19').length).toEqual(0);
});
}

function expectChildNodeIdLength(nodeId, expectedLength) {
expect(service.getChildNodeIdsById(nodeId).length).toEqual(expectedLength);
}
Expand Down
2 changes: 2 additions & 0 deletions src/app/teacher/teacher-authoring.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import { TeacherProjectTranslationService } from '../../assets/wise5/services/te
import { DeleteTranslationsService } from '../../assets/wise5/services/deleteTranslationsService';
import { CopyTranslationsService } from '../../assets/wise5/services/copyTranslationsService';
import { NotifyAuthorService } from '../../assets/wise5/services/notifyAuthorService';
import { RemoveNodeIdFromTransitionsService } from '../../assets/wise5/services/removeNodeIdFromTransitionsService';

@NgModule({
imports: [StudentTeacherCommonModule, AuthoringToolModule, RouterModule, AuthoringRoutingModule],
Expand Down Expand Up @@ -63,6 +64,7 @@ import { NotifyAuthorService } from '../../assets/wise5/services/notifyAuthorSer
DeleteTranslationsService,
{ provide: PeerGroupService, useExisting: TeacherPeerGroupService },
{ provide: ProjectService, useExisting: TeacherProjectService },
RemoveNodeIdFromTransitionsService,
TeacherDataService,
TeacherDiscussionService,
TeacherNodeService,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,25 @@ import { provideHttpClientTesting } from '@angular/common/http/testing';
import { StudentTeacherCommonServicesModule } from '../../../../../app/student-teacher-common-services.module';
import { MoveNodesService } from '../../../services/moveNodesService';
import { TeacherProjectService } from '../../../services/teacherProjectService';
import { RemoveNodeIdFromTransitionsService } from '../../../services/removeNodeIdFromTransitionsService';
import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';

let component: ChooseMoveNodeLocationComponent;
let fixture: ComponentFixture<ChooseMoveNodeLocationComponent>;
describe('ChooseMoveNodeLocationComponent', () => {
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ChooseMoveNodeLocationComponent],
schemas: [NO_ERRORS_SCHEMA],
imports: [RouterTestingModule, StudentTeacherCommonServicesModule],
providers: [MoveNodesService, TeacherProjectService, provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting()]
});
declarations: [ChooseMoveNodeLocationComponent],
schemas: [NO_ERRORS_SCHEMA],
imports: [RouterTestingModule, StudentTeacherCommonServicesModule],
providers: [
MoveNodesService,
RemoveNodeIdFromTransitionsService,
TeacherProjectService,
provideHttpClient(withInterceptorsFromDi()),
provideHttpClientTesting()
]
});
window.history.pushState(
{
selectedNodeIds: ['node1']
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import { DeleteTranslationsService } from '../../services/deleteTranslationsServ
import { provideRouter } from '@angular/router';
import { CopyTranslationsService } from '../../services/copyTranslationsService';
import { TeacherProjectTranslationService } from '../../services/teacherProjectTranslationService';
import { RemoveNodeIdFromTransitionsService } from '../../services/removeNodeIdFromTransitionsService';
import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';

let component: ProjectAuthoringLessonComponent;
Expand Down Expand Up @@ -56,6 +57,7 @@ describe('ProjectAuthoringLessonComponent', () => {
DeleteNodeService,
DeleteTranslationsService,
provideRouter([]),
RemoveNodeIdFromTransitionsService,
TeacherDataService,
TeacherProjectService,
TeacherProjectTranslationService,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import { DeleteTranslationsService } from '../../services/deleteTranslationsServ
import { provideRouter } from '@angular/router';
import { CopyTranslationsService } from '../../services/copyTranslationsService';
import { TeacherProjectTranslationService } from '../../services/teacherProjectTranslationService';
import { RemoveNodeIdFromTransitionsService } from '../../services/removeNodeIdFromTransitionsService';
import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';

const nodeId1 = 'nodeId1';
Expand Down Expand Up @@ -44,6 +45,7 @@ describe('ProjectAuthoringStepComponent', () => {
DeleteNodeService,
DeleteTranslationsService,
provideRouter([]),
RemoveNodeIdFromTransitionsService,
TeacherDataService,
TeacherProjectService,
TeacherProjectTranslationService,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import { AddStepButtonComponent } from '../add-step-button/add-step-button.compo
import { DeleteTranslationsService } from '../../services/deleteTranslationsService';
import { CopyTranslationsService } from '../../services/copyTranslationsService';
import { TeacherProjectTranslationService } from '../../services/teacherProjectTranslationService';
import { RemoveNodeIdFromTransitionsService } from '../../services/removeNodeIdFromTransitionsService';

let configService: ConfigService;
let component: ProjectAuthoringComponent;
Expand Down Expand Up @@ -83,6 +84,7 @@ describe('ProjectAuthoringComponent', () => {
DeleteTranslationsService,
MoveNodesService,
provideRouter([]),
RemoveNodeIdFromTransitionsService,
TeacherDataService,
TeacherProjectService,
TeacherProjectTranslationService,
Expand Down
10 changes: 7 additions & 3 deletions src/assets/wise5/services/deleteNodeService.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
import { Injectable } from '@angular/core';
import { TeacherProjectService } from './teacherProjectService';
import { RemoveNodeIdFromTransitionsService } from './removeNodeIdFromTransitionsService';

@Injectable()
export class DeleteNodeService {
constructor(protected ProjectService: TeacherProjectService) {}
constructor(
protected ProjectService: TeacherProjectService,
private removeNodeIdFromTransitionsService: RemoveNodeIdFromTransitionsService
) {}

/**
* Delete a node from the project and update transitions.
Expand All @@ -23,7 +27,7 @@ export class DeleteNodeService {
if (this.ProjectService.isGroupNode(nodeId)) {
this.removeChildNodes(nodeId);
}
this.ProjectService.removeNodeIdFromTransitions(nodeId);
this.removeNodeIdFromTransitionsService.remove(nodeId);
this.ProjectService.removeNodeIdFromGroups(nodeId);
this.removeNodeIdFromNodes(nodeId);
}
Expand Down Expand Up @@ -117,7 +121,7 @@ export class DeleteNodeService {
const group = this.ProjectService.getNodeById(groupId);
for (let i = 0; i < group.ids.length; i++) {
const childId = group.ids[i];
this.ProjectService.removeNodeIdFromTransitions(childId);
this.removeNodeIdFromTransitionsService.remove(childId);
this.ProjectService.removeNodeIdFromGroups(childId);
this.removeNodeIdFromNodes(childId);
i--; // so it won't skip the next element
Expand Down
18 changes: 11 additions & 7 deletions src/assets/wise5/services/moveNodesService.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
import { Injectable } from '@angular/core';
import { TeacherProjectService } from './teacherProjectService';
import { RemoveNodeIdFromTransitionsService } from './removeNodeIdFromTransitionsService';

@Injectable()
export class MoveNodesService {
constructor(protected projectService: TeacherProjectService) {}
constructor(
protected projectService: TeacherProjectService,
private removeNodeIdFromTransitionsService: RemoveNodeIdFromTransitionsService
) {}

/**
* Move nodes inside an active/inactive group node
Expand All @@ -20,7 +24,7 @@ export class MoveNodesService {
const stationaryNodeIsActive = this.projectService.isActive(groupNodeId);

if (movingNodeIsActive && stationaryNodeIsActive) {
this.projectService.removeNodeIdFromTransitions(nodeId);
this.removeNodeIdFromTransitionsService.remove(nodeId);
this.projectService.removeNodeIdFromGroups(nodeId);

if (n == 0) {
Expand All @@ -31,7 +35,7 @@ export class MoveNodesService {
this.projectService.insertNodeAfterInGroups(nodeId, groupNodeId);
}
} else if (movingNodeIsActive && !stationaryNodeIsActive) {
this.projectService.removeNodeIdFromTransitions(nodeId);
this.removeNodeIdFromTransitionsService.remove(nodeId);
this.projectService.removeNodeIdFromGroups(nodeId);

if (n == 0) {
Expand All @@ -50,7 +54,7 @@ export class MoveNodesService {
this.projectService.insertNodeAfterInGroups(nodeId, groupNodeId);
}
} else if (!movingNodeIsActive && !stationaryNodeIsActive) {
this.projectService.removeNodeIdFromTransitions(nodeId);
this.removeNodeIdFromTransitionsService.remove(nodeId);
this.projectService.removeNodeIdFromGroups(nodeId);

if (n == 0) {
Expand Down Expand Up @@ -172,20 +176,20 @@ export class MoveNodesService {
const movingNodeIsActive = this.projectService.isActive(nodeId);
const stationaryNodeIsActive = this.projectService.isActive(moveAfterNodeId);
if (movingNodeIsActive && stationaryNodeIsActive) {
this.projectService.removeNodeIdFromTransitions(nodeId);
this.removeNodeIdFromTransitionsService.remove(nodeId);
this.projectService.removeNodeIdFromGroups(nodeId);
this.projectService.insertNodeAfterInGroups(nodeId, moveAfterNodeId);
this.projectService.insertNodeAfterInTransitions(node, moveAfterNodeId);
} else if (movingNodeIsActive && !stationaryNodeIsActive) {
this.projectService.removeNodeIdFromTransitions(nodeId);
this.removeNodeIdFromTransitionsService.remove(nodeId);
this.projectService.removeNodeIdFromGroups(nodeId);
this.moveToInactive(node, moveAfterNodeId);
} else if (!movingNodeIsActive && stationaryNodeIsActive) {
this.moveToActive(node);
this.projectService.insertNodeAfterInGroups(nodeId, moveAfterNodeId);
this.projectService.insertNodeAfterInTransitions(node, moveAfterNodeId);
} else if (!movingNodeIsActive && !stationaryNodeIsActive) {
this.projectService.removeNodeIdFromTransitions(nodeId);
this.removeNodeIdFromTransitionsService.remove(nodeId);
this.projectService.removeNodeIdFromGroups(nodeId);
this.moveInactiveNodeToInactiveSection(node, moveAfterNodeId);
}
Expand Down
Loading

0 comments on commit 2560488

Please sign in to comment.