Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature#202 #216

Closed
wants to merge 10 commits into from
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

37 changes: 22 additions & 15 deletions src/app/models/challenge.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,21 +23,28 @@ export class Challenge {
this.popularity = element.popularity;
this.details = element.details;

element.languages.forEach( (language: any) => {
this.languages.push(language);
});

element.solutions.forEach( (solution: any) => {
this.solutions.push(solution);
});

element.resources.forEach( (resource: any) => {
this.resources.push(resource);
});

element.related.forEach( (challengeRelated: any) => {
this.related.push(challengeRelated);
});
if (element.languages) {
element.languages.forEach( (language: any) => {
this.languages.push(language);
});

}
if (element.solutions) {
element.solutions.forEach( (solution: any) => {
this.solutions.push(solution);
});

}
if (element.resources) {
element.resources.forEach( (resource: any) => {
this.resources.push(resource);
});
}
if (element.related) {
element.related.forEach( (challengeRelated: any) => {
this.related.push(challengeRelated);
});
}
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ export class ChallengeInfoComponent {
related_id = this.related;

ngOnInit() {
console.log(this.description)
this.solutionService.solutionSent$.subscribe((value) => {
this.isUserSolution = !value;});
//this.isLogged = this.authService.isLoggedIn();
Expand All @@ -68,16 +69,18 @@ export class ChallengeInfoComponent {


loadRelatedChallenge(id: string) {
this.challengeSubs$ = this.challengeService
.getChallengeById(id)
.subscribe((challenge) => {
this.challenge = new Challenge(challenge);
this.related_title = this.challenge?.challenge_title;
this.related_creation_date = this.challenge?.creation_date;
this.related_level = this.challenge?.level;
this.related_popularity = this.challenge.popularity;
this.related_languages = this.challenge.languages;
this.related_id = this.related;
});


// this.challengeSubs$ = this.challengeService
// .getChallengeById(id)
// .subscribe((challenge) => {
// this.challenge = new Challenge(challenge);
// this.related_title = this.challenge?.challenge_title;
// this.related_creation_date = this.challenge?.creation_date;
// this.related_level = this.challenge?.level;
// this.related_popularity = this.challenge.popularity;
// this.related_languages = this.challenge.languages;
// this.related_id = this.related;
// });
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { SharedComponentsModule } from '../../../../shared/components/shared-components.module';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ChallengeComponent } from './challenge.component';
import { I18nModule } from '../../../../../assets/i18n/i18n.module';
Expand All @@ -20,40 +19,37 @@ describe('ChallengeComponent', () => {
let fixture: ComponentFixture<ChallengeComponent>;
let mockChallengeService: any;


beforeEach(async() => {
beforeEach(async () => {
mockChallengeService = {
getChallengeById: jasmine.createSpy('getChallengeById').and.returnValue(of({})),
};

await TestBed.configureTestingModule({

declarations: [
ChallengeComponent,
ChallengeHeaderComponent,
ChallengeInfoComponent,
SolutionComponent
ChallengeComponent,
ChallengeHeaderComponent,
ChallengeInfoComponent,
SolutionComponent,
],
imports: [
RouterTestingModule,
HttpClientTestingModule,
SharedComponentsModule,
I18nModule,
NgbNavModule,
FormsModule
RouterTestingModule,
HttpClientTestingModule,
I18nModule,
NgbNavModule,
FormsModule,
],
providers: [
{
provide : ActivatedRoute,
useValue: {
queryParams: of({}),
paramMap : of(convertToParamMap({idChallenge: '123'})),
snapshot: {
queryParams: {
tab: 'someTab'
}
}
},
provide: ActivatedRoute,
useValue: {
queryParams: of({}),
paramMap: of(convertToParamMap({ idChallenge: '123' })),
snapshot: {
queryParams: {
tab: 'someTab',
},
},
},
},
{
provide: ChallengeService,
Expand All @@ -62,10 +58,10 @@ describe('ChallengeComponent', () => {
AuthService,
],
}).compileComponents();
});
});

beforeEach(() => {
fixture = TestBed.createComponent(ChallengeComponent);
fixture = TestBed.createComponent(ChallengeComponent) as ComponentFixture<ChallengeComponent>;
component = fixture.componentInstance;
fixture.detectChanges();
});
Expand All @@ -83,8 +79,7 @@ describe('ChallengeComponent', () => {
});

it('should call getChallengeById when loadMasterdata is called', () => {

const challenge = {
const mockChallenge = {
challenge_title: 'Test Challenge',
creation_date: new Date(),
level: 'Easy',
Expand All @@ -99,16 +94,15 @@ describe('ChallengeComponent', () => {
popularity: 0,
languages: [],
};
mockChallengeService.getChallengeById.and.returnValue(of(challenge));
mockChallengeService.getChallengeById.and.returnValue(of({ results: [mockChallenge] }));

component.loadMasterData('123');

expect(mockChallengeService.getChallengeById).toHaveBeenCalledWith('123');
});

it('should set challenge details when loadMasterdata is called', () => {

const challenge = {
const mockChallenge = {
challenge_title: 'Test Challenge',
creation_date: new Date(),
level: 'Easy',
Expand All @@ -123,11 +117,13 @@ describe('ChallengeComponent', () => {
popularity: 0,
languages: [],
};
mockChallengeService.getChallengeById.and.returnValue(of(challenge));
mockChallengeService.getChallengeById.and.returnValue(of({ results: [mockChallenge] }));


component.loadMasterData('123');

expect(component.title).toBe('Test Challenge');
const challengeData = component.challenge;
expect(challengeData.challenge_title).toBe('Test Challenge');
expect(component.creation_date).toBeDefined();
expect(component.level).toBe('Easy');
expect(component.details.description).toBe('Test Challenge Description');
Expand All @@ -140,27 +136,44 @@ describe('ChallengeComponent', () => {
expect(component.languages).toEqual([]);
});

it('should pass the input property value to the child header component', () => {
const challenge = {
challenge_title: 'Test Challenge',
creation_date: new Date(),
level: 'Easy',
it('should pass the input property value to the child header component', () => {
const mockChallenge = {
results: [
{
challenge_title: 'Test Challenge',
creation_date: new Date(),
level: 'Easy',
details: {
description: 'Test Challenge Description',
examples: [],
notes: 'Test Challenge Notes',
},
related: [],
resources: [],
solutions: [],
popularity: 0,
languages: [],
},
],
};
mockChallengeService.getChallengeById.and.returnValue(of(challenge));

mockChallengeService.getChallengeById.and.returnValue(of({ results: [mockChallenge] }));


component.loadMasterData('123');

fixture.detectChanges();

const challengeHeaderComponent = fixture.debugElement.query(By.directive(ChallengeHeaderComponent)).componentInstance;

const challengeHeaderComponent = fixture.debugElement.query(By.directive(ChallengeHeaderComponent))
.componentInstance;

expect(challengeHeaderComponent.title).toBe(component.title);
expect(challengeHeaderComponent.creation_date).toBe(component.creation_date);
expect(challengeHeaderComponent.level).toBe(component.level);
});

it('should pass the input property value to the child info component', () => {
const challenge = {
it('should pass the input property value to the child info component', () => {
const mockChallenge = {
details: {
description: 'Test Challenge Description',
examples: [],
Expand All @@ -172,14 +185,15 @@ describe('ChallengeComponent', () => {
popularity: 0,
languages: [],
};
mockChallengeService.getChallengeById.and.returnValue(of(challenge));
mockChallengeService.getChallengeById.and.returnValue(of({ results: [mockChallenge] }));

component.loadMasterData('123');

fixture.detectChanges();

const challengeInfoComponent = fixture.debugElement.query(By.directive(ChallengeInfoComponent)).componentInstance;

const challengeInfoComponent = fixture.debugElement.query(By.directive(ChallengeInfoComponent))
.componentInstance;

expect(challengeInfoComponent.details).toBeDefined();
expect(challengeInfoComponent.details.description).toBe(component.details.description);
expect(challengeInfoComponent.details.examples).toEqual(component.details.examples);
Expand All @@ -189,6 +203,5 @@ describe('ChallengeComponent', () => {
expect(challengeInfoComponent.solutions).toEqual(component.solutions);
expect(challengeInfoComponent.popularity).toBe(component.popularity);
expect(challengeInfoComponent.languages).toEqual(component.languages);

});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ export class ChallengeComponent {

ngOnInit() {
this.loadMasterData(this.idChallenge);

}

ngOnDestroy() {
Expand All @@ -55,8 +56,9 @@ export class ChallengeComponent {


loadMasterData(id: string) {
this.challengeSubs$ = this.challengeService.getChallengeById(id).subscribe((challenge) => {
this.challenge = new Challenge(challenge);
this.challengeSubs$ = this.challengeService.getChallengeById(id).subscribe((challenge: any) => {

this.challenge = new Challenge(challenge.results[0])
this.title = this.challenge.challenge_title;
this.creation_date = this.challenge.creation_date;
this.level = this.challenge.level;
Expand Down
23 changes: 8 additions & 15 deletions src/app/services/challenge.service.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import {Injectable} from "@angular/core";
import {Observable} from "rxjs";
import {HttpClient} from "@angular/common/http";
//import {environment} from "../../environments/environment";

import { environment } from "src/environments/environment";

@Injectable({
providedIn: 'root'
Expand All @@ -15,21 +14,15 @@ export class ChallengeService {

getChallengeById(id: string):Observable<Object>{

//-----TO CHANGE----

/* return this.http.get(`${environment.BACKEND_BASE_URL}${environment.BACKEND_ALL_CHALLENGES}`,
console.log(id)
const url = `${environment.BACKEND_ITA_CHALLENGE_BASE_URL}${environment.BACKEND_ALL_CHALLENGES}/${id}`
console.log(url)

return this.http.get(url,
{
headers: {
'Content-Type': 'application/dummy'
'Content-Type': 'application/json'
}
});*/


return this.http.get('../assets/dummy/challenge.json',
{
headers: {
'Content-Type': 'application/dummy'
}
});
});
}
}
4 changes: 3 additions & 1 deletion src/environments/environment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,7 @@ export const environment = {
BEARER: 'Bearer ',
BACKEND_TOKEN: '',
pageSize: 8,
BACKEND_DUMMY_SOLUTION :'../assets/dummy/challenge.json'
BACKEND_DUMMY_SOLUTION :'../assets/dummy/challenge.json',
};