Skip to content

Commit

Permalink
Revert "Removed ScrobblingServiceBase"
Browse files Browse the repository at this point in the history
This reverts commit 816dcdd.
  • Loading branch information
digimezzo committed Dec 13, 2024
1 parent bdaf66f commit 2b0d5b8
Show file tree
Hide file tree
Showing 10 changed files with 64 additions and 46 deletions.
6 changes: 3 additions & 3 deletions src/app/app.component.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { IntegrationTestRunner } from './testing/integration-test-runner';
import { EventListenerServiceBase } from './services/event-listener/event-listener.service.base';
import { MediaSessionService } from './services/media-session/media-session.service';
import { TrayServiceBase } from './services/tray/tray.service.base';
import { ScrobblingService } from './services/scrobbling/scrobbling.service';
import { ScrobblingServiceBase } from './services/scrobbling/scrobbling.service.base';
import { DiscordService } from './services/discord/discord.service';
import { TranslatorServiceBase } from './services/translator/translator.service.base';
import { AppearanceServiceBase } from './services/appearance/appearance.service.base';
Expand All @@ -28,7 +28,7 @@ describe('AppComponent', () => {
let appearanceServiceMock: IMock<AppearanceServiceBase>;
let translatorServiceMock: IMock<TranslatorServiceBase>;
let discordServiceMock: IMock<DiscordService>;
let scrobblingServiceMock: IMock<ScrobblingService>;
let scrobblingServiceMock: IMock<ScrobblingServiceBase>;
let trayServiceMock: IMock<TrayServiceBase>;
let mediaSessionServiceMock: IMock<MediaSessionService>;
let eventListenerServiceMock: IMock<EventListenerServiceBase>;
Expand Down Expand Up @@ -72,7 +72,7 @@ describe('AppComponent', () => {
appearanceServiceMock = Mock.ofType<AppearanceServiceBase>();
translatorServiceMock = Mock.ofType<TranslatorServiceBase>();
discordServiceMock = Mock.ofType<DiscordService>();
scrobblingServiceMock = Mock.ofType<ScrobblingService>();
scrobblingServiceMock = Mock.ofType<ScrobblingServiceBase>();
trayServiceMock = Mock.ofType<TrayServiceBase>();
mediaSessionServiceMock = Mock.ofType<MediaSessionService>();
eventListenerServiceMock = Mock.ofType<EventListenerServiceBase>();
Expand Down
4 changes: 2 additions & 2 deletions src/app/app.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { AppConfig } from '../environments/environment';
import { NavigationServiceBase } from './services/navigation/navigation.service.base';
import { AppearanceServiceBase } from './services/appearance/appearance.service.base';
import { TranslatorServiceBase } from './services/translator/translator.service.base';
import { ScrobblingService } from './services/scrobbling/scrobbling.service';
import { ScrobblingServiceBase } from './services/scrobbling/scrobbling.service.base';
import { TrayServiceBase } from './services/tray/tray.service.base';
import { MediaSessionService } from './services/media-session/media-session.service';
import { EventListenerServiceBase } from './services/event-listener/event-listener.service.base';
Expand All @@ -36,7 +36,7 @@ export class AppComponent implements OnInit {
private appearanceService: AppearanceServiceBase,
private translatorService: TranslatorServiceBase,
private discordService: DiscordService,
private scrobblingService: ScrobblingService,
private scrobblingService: ScrobblingServiceBase,
private trayService: TrayServiceBase,
private mediaSessionService: MediaSessionService,
private eventListenerService: EventListenerServiceBase,
Expand Down
2 changes: 2 additions & 0 deletions src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,7 @@ import { EventListenerServiceBase } from './services/event-listener/event-listen
import { LyricsServiceBase } from './services/lyrics/lyrics.service.base';
import { ArtistInformationServiceBase } from './services/artist-information/artist-information.service.base';
import { NowPlayingNavigationServiceBase } from './services/now-playing-navigation/now-playing-navigation.service.base';
import { ScrobblingServiceBase } from './services/scrobbling/scrobbling.service.base';
import { TracksColumnsServiceBase } from './services/track-columns/tracks-columns.service.base';
import { SemanticZoomServiceBase } from './services/semantic-zoom/semantic-zoom.service.base';
import { TrayServiceBase } from './services/tray/tray.service.base';
Expand Down Expand Up @@ -588,6 +589,7 @@ export function appInitializerFactory(translate: TranslateService, injector: Inj
{ provide: TrayServiceBase, useClass: TrayService },
{ provide: SemanticZoomServiceBase, useClass: SemanticZoomService },
{ provide: TracksColumnsServiceBase, useClass: TracksColumnsService },
{ provide: ScrobblingServiceBase, useClass: ScrobblingService },
{ provide: NowPlayingNavigationServiceBase, useClass: NowPlayingNavigationService },
{ provide: ArtistInformationServiceBase, useClass: ArtistInformationService },
{ provide: WelcomeServiceBase, useClass: WelcomeService },
Expand Down
14 changes: 14 additions & 0 deletions src/app/services/scrobbling/scrobbling.service.base.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { Observable } from 'rxjs';
import { TrackModel } from '../track/track-model';
import { SignInState } from './sign-in-state';

export abstract class ScrobblingServiceBase {
public abstract signInStateChanged$: Observable<SignInState>;
public abstract get signInState(): SignInState;
public abstract username: string;
public abstract password: string;
public abstract initialize(): void;
public abstract signInAsync(): Promise<void>;
public abstract signOut(): void;
public abstract sendTrackLoveAsync(track: TrackModel, love: boolean): Promise<void>;
}
59 changes: 30 additions & 29 deletions src/app/services/scrobbling/scrobbling.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ import { SettingsBase } from '../../common/settings/settings.base';
import { PlaybackProgress } from '../playback/playback-progress';
import { PlaybackStarted } from '../playback/playback-started';
import { TrackModel } from '../track/track-model';
import { ScrobblingService } from './scrobbling.service';
import { SignInState } from './sign-in-state';
import { PlaybackService } from '../playback/playback.service';
import { LastfmApi } from '../../common/api/lastfm/lastfm.api';
import { TranslatorServiceBase } from '../translator/translator.service.base';
import { ScrobblingService } from './scrobbling.service';
import { ScrobblingServiceBase } from './scrobbling.service.base';
import { Track } from '../../data/entities/track';

jest.mock('jimp', () => ({ exec: jest.fn() }));
Expand Down Expand Up @@ -59,7 +60,7 @@ describe('ScrobblingService', () => {
playbackServiceMock.setup((x) => x.playbackSkipped$).returns(() => playbackService_playbackSkipped$);
});

function createService(): ScrobblingService {
function createService(): ScrobblingServiceBase {
return new ScrobblingService(
playbackServiceMock.object,
lastfmApiMock.object,
Expand Down Expand Up @@ -104,7 +105,7 @@ describe('ScrobblingService', () => {
// Arrange

// Act
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();

// Assert
expect(service).toBeDefined();
Expand All @@ -115,7 +116,7 @@ describe('ScrobblingService', () => {
it('should set username from settings if Last.fm scrobbling is enabled', () => {
// Arrange
createSettingsMock(true, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();

// Act
service.initialize();
Expand All @@ -127,7 +128,7 @@ describe('ScrobblingService', () => {
it('should set password from settings if Last.fm scrobbling is enabled', () => {
// Arrange
createSettingsMock(true, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();

// Act
service.initialize();
Expand All @@ -139,7 +140,7 @@ describe('ScrobblingService', () => {
it('should not set username from settings if Last.fm scrobbling is disabled', () => {
// Arrange
createSettingsMock(false, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();

// Act
service.initialize();
Expand All @@ -151,7 +152,7 @@ describe('ScrobblingService', () => {
it('should not set password from settings if Last.fm scrobbling is disabled', () => {
// Arrange
createSettingsMock(false, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();

// Act
service.initialize();
Expand All @@ -163,7 +164,7 @@ describe('ScrobblingService', () => {
it('should set SignInState to SignedOut if Last.fm scrobbling is disabled', () => {
// Arrange
createSettingsMock(false, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();

// Act
service.initialize();
Expand All @@ -175,7 +176,7 @@ describe('ScrobblingService', () => {
it('should set SignInState to SignedIn if Last.fm scrobbling is enabled and lastFmUsername, lastFmPassword and lastFmSessionKey are set in the settings', () => {
// Arrange
createSettingsMock(true, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();

// Act
service.initialize();
Expand All @@ -187,7 +188,7 @@ describe('ScrobblingService', () => {
it('should set SignInState to SignedOut if Last.fm scrobbling is enabled and lastFmUsername is not set in the settings', () => {
// Arrange
createSettingsMock(true, '', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();

// Act
service.initialize();
Expand All @@ -199,7 +200,7 @@ describe('ScrobblingService', () => {
it('should set SignInState to SignedOut if Last.fm scrobbling is enabled and lastFmPassword is not set in the settings', () => {
// Arrange
createSettingsMock(true, 'user', '', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();

// Act
service.initialize();
Expand All @@ -211,7 +212,7 @@ describe('ScrobblingService', () => {
it('should set SignInState to SignedOut if Last.fm scrobbling is enabled and lastFmSessionKey is not set in the settings', () => {
// Arrange
createSettingsMock(true, 'user', 'password', '');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();

// Act
service.initialize();
Expand All @@ -228,7 +229,7 @@ describe('ScrobblingService', () => {
.setup((x) => x.updateTrackNowPlayingAsync('key', 'artist1', 'title1', 'albumTitle1'))
.returns(() => Promise.resolve(true));
createSettingsMock(true, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();
service.initialize();

const trackModel1: TrackModel = createTrackModel('path1', ';artist1;', 'title1', 'albumTitle1', 300000);
Expand All @@ -248,7 +249,7 @@ describe('ScrobblingService', () => {
.setup((x) => x.updateTrackNowPlayingAsync('key', 'artist1', 'title1', 'albumTitle1'))
.returns(() => Promise.resolve(true));
createSettingsMock(false, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();
service.initialize();

const trackModel1: TrackModel = createTrackModel('path1', ';artist1;', 'title1', 'albumTitle1', 300000);
Expand All @@ -268,7 +269,7 @@ describe('ScrobblingService', () => {
.setup((x) => x.updateTrackNowPlayingAsync('key', 'artist1', 'title1', 'albumTitle1'))
.returns(() => Promise.resolve(true));
createSettingsMock(true, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();
service.initialize();

const trackModel1: TrackModel = createTrackModel('path1', '', 'title1', 'albumTitle1', 300000);
Expand All @@ -288,7 +289,7 @@ describe('ScrobblingService', () => {
.setup((x) => x.updateTrackNowPlayingAsync('key', 'artist1', 'title1', 'albumTitle1'))
.returns(() => Promise.resolve(true));
createSettingsMock(true, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();
service.initialize();

const trackModel1: TrackModel = createTrackModel('path1', ';artist1;', '', 'albumTitle1', 300000);
Expand All @@ -312,7 +313,7 @@ describe('ScrobblingService', () => {
.setup((x) => x.updateTrackNowPlayingAsync('key', 'artist1', 'title1', 'albumTitle1'))
.returns(() => Promise.resolve(true));
createSettingsMock(true, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();
service.initialize();

const trackModel1: TrackModel = createTrackModel('path1', ';artist1;', 'title1', 'albumTitle1', 300000);
Expand All @@ -339,7 +340,7 @@ describe('ScrobblingService', () => {
.setup((x) => x.updateTrackNowPlayingAsync('key', 'artist1', 'title1', 'albumTitle1'))
.returns(() => Promise.resolve(true));
createSettingsMock(true, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();
service.initialize();

const trackModel1: TrackModel = createTrackModel('path1', ';artist1;', 'title1', 'albumTitle1', 900000);
Expand All @@ -366,7 +367,7 @@ describe('ScrobblingService', () => {
.setup((x) => x.updateTrackNowPlayingAsync('key', 'artist1', 'title1', 'albumTitle1'))
.returns(() => Promise.resolve(true));
createSettingsMock(true, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();
service.initialize();

const trackModel1: TrackModel = createTrackModel('path1', ';artist1;', 'title1', 'albumTitle1', 20000);
Expand All @@ -393,7 +394,7 @@ describe('ScrobblingService', () => {
.setup((x) => x.updateTrackNowPlayingAsync('key', 'artist1', 'title1', 'albumTitle1'))
.returns(() => Promise.resolve(true));
createSettingsMock(true, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();
service.initialize();

const trackModel1: TrackModel = createTrackModel('path1', ';artist1;', 'title1', 'albumTitle1', 300000);
Expand Down Expand Up @@ -421,7 +422,7 @@ describe('ScrobblingService', () => {
.setup((x) => x.updateTrackNowPlayingAsync('key', 'artist1', 'title1', 'albumTitle1'))
.returns(() => Promise.resolve(true));
createSettingsMock(false, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();
service.initialize();

const trackModel1: TrackModel = createTrackModel('path1', ';artist1;', 'title1', 'albumTitle1', 300000);
Expand All @@ -448,7 +449,7 @@ describe('ScrobblingService', () => {
.setup((x) => x.updateTrackNowPlayingAsync('key', 'artist1', 'title1', 'albumTitle1'))
.returns(() => Promise.resolve(true));
createSettingsMock(true, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();
service.initialize();

const playbackProgress: PlaybackProgress = new PlaybackProgress(200, 300);
Expand All @@ -472,7 +473,7 @@ describe('ScrobblingService', () => {
.setup((x) => x.updateTrackNowPlayingAsync('key', 'artist1', 'title1', 'albumTitle1'))
.returns(() => Promise.resolve(true));
createSettingsMock(true, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();
service.initialize();

const trackModel1: TrackModel = createTrackModel('path1', '', 'title1', 'albumTitle1', 300000);
Expand All @@ -499,7 +500,7 @@ describe('ScrobblingService', () => {
.setup((x) => x.updateTrackNowPlayingAsync('key', 'artist1', 'title1', 'albumTitle1'))
.returns(() => Promise.resolve(true));
createSettingsMock(true, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();
service.initialize();

const trackModel1: TrackModel = createTrackModel('path1', ';artist1;', '', 'albumTitle1', 300000);
Expand All @@ -523,7 +524,7 @@ describe('ScrobblingService', () => {
it('should not send track love/unlove when not signed in', async () => {
// Arrange
createSettingsMock(false, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();
service.initialize();

const trackModel1: TrackModel = createTrackModel('path1', ';artist1a;;artist1b;', 'title1', 'albumTitle1', 300000);
Expand All @@ -539,7 +540,7 @@ describe('ScrobblingService', () => {
it('should not send track love/unlove for an unknown track title', async () => {
// Arrange
createSettingsMock(true, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();
service.initialize();

const trackModel1: TrackModel = createTrackModel('path1', ';artist1a;;artist1b;', '', 'albumTitle1', 300000);
Expand All @@ -555,7 +556,7 @@ describe('ScrobblingService', () => {
it('should not send track love/unlove for unknown artists', async () => {
// Arrange
createSettingsMock(true, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();
service.initialize();

const trackModel1: TrackModel = createTrackModel('path1', '', 'title1', 'albumTitle1', 300000);
Expand All @@ -571,7 +572,7 @@ describe('ScrobblingService', () => {
it('should send track love for all artists', async () => {
// Arrange
createSettingsMock(true, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();
service.initialize();

const trackModel1: TrackModel = createTrackModel('path1', ';artist1a;;artist1b;', 'title1', 'albumTitle1', 300000);
Expand All @@ -588,7 +589,7 @@ describe('ScrobblingService', () => {
it('should send track unlove for all artists', async () => {
// Arrange
createSettingsMock(true, 'user', 'password', 'key');
const service: ScrobblingService = createService();
const service: ScrobblingServiceBase = createService();
service.initialize();

const trackModel1: TrackModel = createTrackModel('path1', ';artist1a;;artist1b;', 'title1', 'albumTitle1', 300000);
Expand Down
Loading

0 comments on commit 2b0d5b8

Please sign in to comment.