Skip to content

Commit

Permalink
Fix part of #10700: Refactor Object Factories with Dependencies (#10868)
Browse files Browse the repository at this point in the history
* Refactor Collection Node Object Factory

* Refactor Collection Object Factory

* Refactor Email Query Deashboard and Email Query Dashboard Results Object Factories

* Refactor Platform Parameter Filter, Rule Object Factories

* Refactor Exploration Stats Object Factories

* Refactor LearnerExplorationSummary and UserProfile Object Factories

* Refactor ReadOnlyStoryNode and StoryPlaythrough Object Factories

* Refactor TopicSummary and ClassroomData Object Factories

* Refactor HighBounceRateTask Object Factory

* Refactor SuccessiveIncorrectAnswerTask IneffectiveFeedbackLoopTask NeedsGuidingResponseTask and ExplorationTask Object Factories

* Fix coverage

* Fix coverage

* Fix coverage

* Fix Coverage

* Fix Review Issues

* Fix Frontend Test Issues

* Add TODO(#10875): Fix type mismatch

* Add TODO(#10875): Fix type mismatch

* Fix Merge conflicts in angular-services

* Fix compile issues
  • Loading branch information
darksun27 committed Oct 18, 2020
1 parent 8989276 commit a63fe8a
Show file tree
Hide file tree
Showing 105 changed files with 1,127 additions and 2,016 deletions.
140 changes: 2 additions & 138 deletions core/templates/components/oppia-angular-root.component.ts

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import { Injectable } from '@angular/core';
import { downgradeInjectable } from '@angular/upgrade/static';

import { ExplorationRatings } from
'domain/summary/learner-exploration-summary-object.factory';
'domain/summary/learner-exploration-summary.model';

@Injectable({
providedIn: 'root'
Expand Down
16 changes: 5 additions & 11 deletions core/templates/domain/admin/admin-backend-api.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,12 @@ import { AdminPageData, AdminBackendApiService } from 'domain/admin/admin-backen
import { ComputationData } from 'domain/admin/computation-data.model';
import { Job } from 'domain/admin/job.model';
import { JobStatusSummary } from 'domain/admin/job-status-summary.model';
import { PlatformParameterFilterType } from
'domain/platform_feature/platform-parameter-filter-object.factory';
import { FeatureStage, PlatformParameterObjectFactory } from
'domain/platform_feature/platform-parameter-object.factory';
import { TopicSummaryObjectFactory } from 'domain/topic/TopicSummaryObjectFactory';
import { TopicSummary } from 'domain/topic/topic-summary.model';
import { PlatformParameterFilterType } from 'domain/platform_feature/platform-parameter-filter.model';
import { FeatureStage, PlatformParameter } from 'domain/platform_feature/platform-parameter.model';

describe('Admin backend api service', () => {
let abas: AdminBackendApiService;
let ppof: PlatformParameterObjectFactory;
let tsof: TopicSummaryObjectFactory;
let httpTestingController: HttpTestingController;
let adminBackendResponse = {
unfinished_job_data: [],
Expand Down Expand Up @@ -130,8 +126,6 @@ describe('Admin backend api service', () => {
});

abas = TestBed.get(AdminBackendApiService);
ppof = TestBed.get(PlatformParameterObjectFactory);
tsof = TestBed.get(TopicSummaryObjectFactory);
httpTestingController = TestBed.get(HttpTestingController);
adminDataObject = {
demoExplorations: adminBackendResponse.demo_explorations,
Expand All @@ -157,9 +151,9 @@ describe('Admin backend api service', () => {
adminBackendResponse.continuous_computations_data.map(
ComputationData.createFromBackendDict),
topicSummaries: adminBackendResponse.topic_summaries.map(
tsof.createFromBackendDict),
TopicSummary.createFromBackendDict),
featureFlags: adminBackendResponse.feature_flags.map(
dict => ppof.createFromBackendDict(dict)
dict => PlatformParameter.createFromBackendDict(dict)
)
};
});
Expand Down
18 changes: 7 additions & 11 deletions core/templates/domain/admin/admin-backend-api.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,9 @@ import { Injectable } from '@angular/core';
import { AdminPageConstants } from
'pages/admin-page/admin-page.constants';
import {
TopicSummaryBackendDict,
TopicSummary,
TopicSummaryObjectFactory
} from 'domain/topic/TopicSummaryObjectFactory';
TopicSummaryBackendDict
} from 'domain/topic/topic-summary.model';
import {
ComputationData,
ComputationDataBackendDict,
Expand All @@ -40,10 +39,9 @@ import {
JobStatusSummaryBackendDict,
} from 'domain/admin/job-status-summary.model';
import {
PlatformParameterBackendDict,
PlatformParameter,
PlatformParameterObjectFactory
} from 'domain/platform_feature/platform-parameter-object.factory';
PlatformParameterBackendDict
} from 'domain/platform_feature/platform-parameter.model';


interface UserRoles {
Expand Down Expand Up @@ -105,9 +103,7 @@ export interface AdminPageData {
})
export class AdminBackendApiService {
constructor(
private http: HttpClient,
private topicSummaryObjectFactory: TopicSummaryObjectFactory,
private platformParameterObjectFactory: PlatformParameterObjectFactory) {}
private http: HttpClient) {}

getData(): Promise<AdminPageData> {
return new Promise((resolve, reject) => {
Expand All @@ -133,9 +129,9 @@ export class AdminBackendApiService {
continuousComputationsData: response.continuous_computations_data.map(
ComputationData.createFromBackendDict),
topicSummaries: response.topic_summaries.map(
this.topicSummaryObjectFactory.createFromBackendDict),
TopicSummary.createFromBackendDict),
featureFlags: response.feature_flags.map(
dict => this.platformParameterObjectFactory.createFromBackendDict(
dict => PlatformParameter.createFromBackendDict(
dict)
)
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,13 @@ import { TestBed, fakeAsync, flushMicrotasks } from '@angular/core/testing';

import { ClassroomBackendApiService } from
'domain/classroom/classroom-backend-api.service';
import { ClassroomDataObjectFactory } from
'domain/classroom/ClassroomDataObjectFactory';
import { TopicSummaryBackendDict } from
'domain/topic/TopicSummaryObjectFactory';
import { ClassroomData } from 'domain/classroom/classroom-data.model';
import { TopicSummaryBackendDict } from 'domain/topic/topic-summary.model';

describe('Classroom backend API service', function() {
let classroomBackendApiService:
ClassroomBackendApiService = null;
let httpTestingController: HttpTestingController;
let classroomDataObjectFactory:
ClassroomDataObjectFactory = null;
let firstTopicSummaryDict: TopicSummaryBackendDict = {
id: 'topic1',
name: 'Topic name',
Expand Down Expand Up @@ -83,11 +79,10 @@ describe('Classroom backend API service', function() {
});
classroomBackendApiService = TestBed.get(ClassroomBackendApiService);
httpTestingController = TestBed.get(HttpTestingController);
classroomDataObjectFactory = TestBed.get(ClassroomDataObjectFactory);

// Sample topic object returnable from the backend.
sampleClassroomDataObject = (
classroomDataObjectFactory.createFromBackendData(
ClassroomData.createFromBackendData(
responseDictionaries.name, responseDictionaries.topic_summary_dicts,
responseDictionaries.course_details,
responseDictionaries.topic_list_intro));
Expand Down
12 changes: 5 additions & 7 deletions core/templates/domain/classroom/classroom-backend-api.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,10 @@ import { EventEmitter, Injectable } from '@angular/core';
import { ClassroomDomainConstants } from
'domain/classroom/classroom-domain.constants';
import {
ClassroomData,
ClassroomDataObjectFactory
} from 'domain/classroom/ClassroomDataObjectFactory';
ClassroomData
} from 'domain/classroom/classroom-data.model';
import { TopicSummaryBackendDict } from
'domain/topic/TopicSummaryObjectFactory';
'domain/topic/topic-summary.model';
import { UrlInterpolationService } from
'domain/utilities/url-interpolation.service';

Expand All @@ -49,8 +48,7 @@ export class ClassroomBackendApiService {
classroomData: ClassroomData = null;
constructor(
private urlInterpolationService: UrlInterpolationService,
private http: HttpClient,
private classroomDataObjectFactory: ClassroomDataObjectFactory
private http: HttpClient
) {}

private _initializeTranslationEventEmitter = new EventEmitter<void>();
Expand All @@ -67,7 +65,7 @@ export class ClassroomBackendApiService {
this.http.get<ClassroomDataBackendDict>(
classroomDataUrl).toPromise().then(response => {
this.classroomData = (
this.classroomDataObjectFactory.createFromBackendData(
ClassroomData.createFromBackendData(
response.name, response.topic_summary_dicts, response.course_details,
response.topic_list_intro));
if (successCallback) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,25 +13,18 @@
// limitations under the License.

/**
* @fileoverview Unit tests for ClassroomDataObjectFactory.
* @fileoverview Unit tests for ClassroomDataModel.
*/

import { TestBed } from '@angular/core/testing';
import { ClassroomData} from
'domain/classroom/classroom-data.model';
import { TopicSummary } from
'domain/topic/topic-summary.model';

import { ClassroomDataObjectFactory } from
'domain/classroom/ClassroomDataObjectFactory';
import { TopicSummaryObjectFactory } from
'domain/topic/TopicSummaryObjectFactory';

describe('Classroom data object factory', () => {
describe('Classroom data model', () => {
let topicSummaryDicts;
let classroomDataObjectFactory: ClassroomDataObjectFactory;
let topicSummaryObjectFactory: TopicSummaryObjectFactory;

beforeEach(() => {
classroomDataObjectFactory = TestBed.get(ClassroomDataObjectFactory);
topicSummaryObjectFactory = TestBed.get(TopicSummaryObjectFactory);

topicSummaryDicts = [{
id: 'topic1',
name: 'Topic name',
Expand All @@ -57,14 +50,14 @@ describe('Classroom data object factory', () => {

it('should create a new classroom object from a backend dictionary', () => {
let classroomData = (
classroomDataObjectFactory.createFromBackendData(
ClassroomData.createFromBackendData(
'Math', topicSummaryDicts, 'Course Details', 'Topics Covered'));
expect(classroomData.getName()).toEqual('Math');
expect(classroomData.getCourseDetails()).toEqual('Course Details');
expect(classroomData.getTopicListIntro()).toEqual('Topics Covered');
expect(classroomData.getTopicSummaries()[0]).toEqual(
topicSummaryObjectFactory.createFromBackendDict(topicSummaryDicts[0]));
TopicSummary.createFromBackendDict(topicSummaryDicts[0]));
expect(classroomData.getTopicSummaries()[1]).toEqual(
topicSummaryObjectFactory.createFromBackendDict(topicSummaryDicts[1]));
TopicSummary.createFromBackendDict(topicSummaryDicts[1]));
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,13 @@
// limitations under the License.

/**
* @fileoverview Object factory for creating frontend instances of
* classroom objects.
* @fileoverview Frontend Model for classroom data.
*/

import { downgradeInjectable } from '@angular/upgrade/static';
import { Injectable } from '@angular/core';
import {
TopicSummary, TopicSummaryObjectFactory, TopicSummaryBackendDict
} from 'domain/topic/TopicSummaryObjectFactory';
TopicSummary,
TopicSummaryBackendDict
} from 'domain/topic/topic-summary.model';

export class ClassroomData {
_name: string;
Expand All @@ -38,6 +36,20 @@ export class ClassroomData {
this._topicListIntro = topicListIntro;
}

static createFromBackendData(
name: string, topicSummaryDicts: TopicSummaryBackendDict[],
courseDetails: string, topicListIntro: string): ClassroomData {
let topicSummaries = topicSummaryDicts.map(
(summaryDict) => {
return TopicSummary.createFromBackendDict(
summaryDict);
}
);
return new ClassroomData(
name, topicSummaries, courseDetails, topicListIntro
);
}

getName(): string {
return this._name;
}
Expand All @@ -54,29 +66,3 @@ export class ClassroomData {
return this._topicListIntro;
}
}

@Injectable({
providedIn: 'root'
})
export class ClassroomDataObjectFactory {
constructor(
private topicSummaryObjectFactory: TopicSummaryObjectFactory) {}

createFromBackendData(
name: string, topicSummaryDicts: TopicSummaryBackendDict[],
courseDetails: string, topicListIntro: string): ClassroomData {
let topicSummaries = topicSummaryDicts.map(
(summaryDict) => {
return this.topicSummaryObjectFactory.createFromBackendDict(
summaryDict);
}
);
return new ClassroomData(
name, topicSummaries, courseDetails, topicListIntro
);
}
}

angular.module('oppia').factory(
'ClassroomDataObjectFactory',
downgradeInjectable(ClassroomDataObjectFactory));
Loading

0 comments on commit a63fe8a

Please sign in to comment.