Skip to content

Commit 7036b8a

Browse files
Dependency Inversion Principle - done (#13)
1 parent 6fbe34e commit 7036b8a

22 files changed

Lines changed: 282 additions & 2 deletions

src/app/app.config.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
22
import { provideRouter } from '@angular/router';
33

44
import { routes } from './app.routes';
5+
import { provideHttpClient } from '@angular/common/http';
56

67
export const appConfig: ApplicationConfig = {
7-
providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes)]
8+
providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes), provideHttpClient()]
89
};

src/app/app.routes.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,9 @@ export const routes: Routes = [
2020
{
2121
path: "interface-segregation-principle",
2222
loadComponent: () => import('./interface-segregation-principle/interface-segregation-principle.component').then(c => c.InterfaceSegregationPrincipleComponent)
23+
},
24+
{
25+
path: "dependency-inversion-principle",
26+
loadComponent: () => import('./dependency-inversion-principle/dependency-inversion-principle.component').then(c => c.DependencyInversionPrincipleComponent)
2327
}
2428
];

src/app/dependency-inversion-principle/dependency-inversion-principle.component.css

Whitespace-only changes.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<h1>D: Dependency Inversion Principle</h1>
2+
3+
<div class="row mt-5">
4+
<div class="col-6">
5+
<app-without-dip />
6+
</div>
7+
<div class="col-6">
8+
<app-with-dip />
9+
</div>
10+
</div>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { ComponentFixture, TestBed } from '@angular/core/testing';
2+
3+
import { DependencyInversionPrincipleComponent } from './dependency-inversion-principle.component';
4+
5+
describe('DependencyInversionPrincipleComponent', () => {
6+
let component: DependencyInversionPrincipleComponent;
7+
let fixture: ComponentFixture<DependencyInversionPrincipleComponent>;
8+
9+
beforeEach(async () => {
10+
await TestBed.configureTestingModule({
11+
imports: [DependencyInversionPrincipleComponent]
12+
})
13+
.compileComponents();
14+
15+
fixture = TestBed.createComponent(DependencyInversionPrincipleComponent);
16+
component = fixture.componentInstance;
17+
fixture.detectChanges();
18+
});
19+
20+
it('should create', () => {
21+
expect(component).toBeTruthy();
22+
});
23+
});
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { Component } from '@angular/core';
2+
import { WithDipComponent } from './with-dip/with-dip.component';
3+
import { WithoutDipComponent } from './without-dip/without-dip.component';
4+
5+
@Component({
6+
selector: 'app-dependency-inversion-principle',
7+
standalone: true,
8+
imports: [WithDipComponent, WithoutDipComponent],
9+
templateUrl: './dependency-inversion-principle.component.html',
10+
styleUrl: './dependency-inversion-principle.component.css'
11+
})
12+
export class DependencyInversionPrincipleComponent {
13+
14+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { TestBed } from '@angular/core/testing';
2+
3+
import { HttpDatasourceService } from './http-datasource.service';
4+
5+
describe('HttpDatasourceService', () => {
6+
let service: HttpDatasourceService;
7+
8+
beforeEach(() => {
9+
TestBed.configureTestingModule({});
10+
service = TestBed.inject(HttpDatasourceService);
11+
});
12+
13+
it('should be created', () => {
14+
expect(service).toBeTruthy();
15+
});
16+
});
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { Injectable } from '@angular/core';
2+
import { UserDataSource } from './user.interface';
3+
import { HttpClient } from '@angular/common/http';
4+
import { Observable } from 'rxjs';
5+
6+
@Injectable({
7+
providedIn: 'root'
8+
})
9+
export class HttpDatasourceService implements UserDataSource {
10+
11+
private apiUrl: string = 'https://reqres.in/api/users?page=1';
12+
13+
constructor(
14+
private http: HttpClient
15+
) { }
16+
17+
fetchUsers(): Observable<any[]> {
18+
return this.http.get<any[]>(this.apiUrl);
19+
}
20+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { Observable } from "rxjs";
2+
3+
export interface UserDataSource {
4+
fetchUsers(): Observable<any[]>;
5+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { TestBed } from '@angular/core/testing';
2+
3+
import { UserService } from './user.service';
4+
5+
describe('UserService', () => {
6+
let service: UserService;
7+
8+
beforeEach(() => {
9+
TestBed.configureTestingModule({});
10+
service = TestBed.inject(UserService);
11+
});
12+
13+
it('should be created', () => {
14+
expect(service).toBeTruthy();
15+
});
16+
});

0 commit comments

Comments
 (0)