Skip to content

Commit

Permalink
Fixes #59 (#61)
Browse files Browse the repository at this point in the history
  • Loading branch information
thirtyaughtsix authored and MelvinMallari committed Jul 31, 2019
1 parent e1b08bf commit 421aaa6
Show file tree
Hide file tree
Showing 8 changed files with 95 additions and 57 deletions.
2 changes: 1 addition & 1 deletion src/components/listing/FileLister.vue
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ export default class FileLister extends Vue {
await listing.list(listModule.listing.hash)
listModule.setPercentComplete(100)
listModule.setStatus(ProcessStatus.Complete)
ffaListingsModule.addUpload(listModule.listing)
ffaListingsModule.addCandidate(listModule.listing)
} catch {
listModule.setStatus(ProcessStatus.Error)
}
Expand Down
2 changes: 1 addition & 1 deletion src/components/listing/FileMetadata.vue
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ export default class FileMetadata extends Vue {
public mounted(this: FileMetadata) {
const listingsModule = getModule(FfaListingsModule, this.$store)
listingsModule.fetchUploads()
listingsModule.fetchCandidates()
this.$store.subscribe(this.vuexSubscriptions)
}
Expand Down
65 changes: 47 additions & 18 deletions src/modules/FfaListingsModule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,41 +8,72 @@ import FfaListing from '../models/FfaListing'
@Module({ namespaced: true, name: 'ffaListingsModule' })
export default class FfaListingsModule extends VuexModule {

public uploads: FfaListing[] = []
public candidates: FfaListing[] = []
public listed: FfaListing[] = []
public purchases: FfaListing[] = []

@Mutation
public reset() {
this.uploads = []
this.candidates = []
this.purchases = []
}

@Mutation
public setUserUploadeds(uploads: FfaListing[]) {
this.uploads = uploads
public setCandidates(candidates: FfaListing[]) {
this.candidates = candidates
}

@Mutation
public addUpload(upload: FfaListing) {
this.uploads.push(upload)
public addCandidate(candidate: FfaListing) {
this.candidates.push(candidate)
}

@Mutation
public removeUpload(upload: FfaListing) {
this.uploads = this.uploads.filter((f) => f.title !== upload.title)
public promoteCandidate(candidate: FfaListing) {

if (this.candidates.filter((c) => c.hash === candidate.hash).length < 1) {
return
}

if (this.listed.filter((l) => l.hash === candidate.hash).length > 0) {
return
}

this.listed.push(candidate)
this.candidates = this.candidates.filter((f) => f.title !== candidate.title)
}

@MutationAction({mutate: ['uploads']})
public async fetchUploads() {
@Mutation
public removeCandidate(candidate: FfaListing) {
this.candidates = this.candidates.filter((f) => f.title !== candidate.title)
}

@Mutation
public setListed(listed: FfaListing[]) {
this.listed = listed
}

@Mutation
public addToListed(listing: FfaListing) {
this.listed.push(listing)
}

@Mutation
public removeFromListed(listing: FfaListing) {
this.listed = this.listed.filter((f) => f.title !== listing.title)
}

@MutationAction({mutate: ['candidates']})
public async fetchCandidates() {
await new Promise((resolve) => setTimeout(resolve, 2000))
const file1 = new FfaListing('title1', 'description1', 'type1', 'hash1', 'md51', [])
const file2 = new FfaListing('title2', 'description2', 'type2', 'hash2', 'md52', [])
const file3 = new FfaListing('title3', 'description3', 'type3', 'hash3', 'md53', [])
const file4 = new FfaListing('title4', 'description4', 'type4', 'hash4', 'md54', [])
const file5 = new FfaListing('title5', 'description5', 'type5', 'hash5', 'md55', [])
const uploads: FfaListing[] = [file1, file2, file3, file4, file5]
const candidates: FfaListing[] = [file1, file2, file3, file4, file5]
const response = {
uploads,
candidates,
}
return response
}
Expand All @@ -51,11 +82,9 @@ export default class FfaListingsModule extends VuexModule {
return 'ffaListingsModule'
}

get uploadedTitles(): string[] {
return this.uploads.map((f) => f.title)
}

public foo(): string {
return 'foo'
get allTitles(): string[] {
const titles = this.candidates.map((c) => c.title)
titles.concat(this.listed.map((l) => l.title))
return titles
}
}
3 changes: 0 additions & 3 deletions src/modules/validators/FfaModuleValidation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@ export default class FfaModuleValidation implements Validation {
}

public get valid(): boolean {
// this.fieldValidations.forEach((fv) => {
// console.log(`${fv.field}: ${fv.valid}`)
// })
return this.fieldValidations.every((fv) => fv.valid)
}
}
2 changes: 1 addition & 1 deletion src/modules/validators/TitleFieldValidator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export default class TitleFieldValidator extends FfaFieldValidator {
public validate(): FfaFieldValidation {
const listingsModule = getModule(FfaListingsModule, this.vuexStore)
const validation = new FfaFieldValidation(this.field)
validation.valid = listingsModule.uploadedTitles.indexOf(this.value) < 0
validation.valid = listingsModule.allTitles.indexOf(this.value) < 0
if (!validation.valid) {
validation.errorMessage = `Title '${this.value}' already in use!`
}
Expand Down
4 changes: 2 additions & 2 deletions tests/unit/field-validators/TitleFieldValidator.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ describe('TitleFieldValidator.ts', () => {
const listingsModule = getModule(FfaListingsModule, appStore)

beforeAll(() => {
listingsModule.addUpload(new FfaListing('title', 'description', 'type', 'hash', 'md5', []))
listingsModule.addUpload(new FfaListing('another title', 'description', 'type', 'hash', 'md5', []))
listingsModule.addCandidate(new FfaListing('title', 'description', 'type', 'hash', 'md5', []))
listingsModule.addCandidate(new FfaListing('another title', 'description', 'type', 'hash', 'md5', []))
})

it('correctly returns validates title', () => {
Expand Down
4 changes: 2 additions & 2 deletions tests/unit/module-validators/UploadModuleValidator.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ describe('UploadModuleValidator.ts', () => {
const listingsModule = getModule(FfaListingsModule, appStore)

beforeAll(() => {
listingsModule.addUpload(new FfaListing('title', 'description', 'type', 'hash', 'md5', []))
listingsModule.addUpload(new FfaListing('another title', 'description', 'type', 'hash', 'md5', []))
listingsModule.addCandidate(new FfaListing('title', 'description', 'type', 'hash', 'md5', []))
listingsModule.addCandidate(new FfaListing('another title', 'description', 'type', 'hash', 'md5', []))
})

it('correctly returns validates title', () => {
Expand Down
70 changes: 41 additions & 29 deletions tests/unit/modules/FfaListingsModule.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,51 +11,63 @@ describe('FfaListingsModule.ts', () => {

it('correctly initializes and exposes properties', () => {
const module = getModule(FfaListingsModule, appStore)
expect(module.uploads).not.toBeNull()
expect(Array.isArray(module.uploads)).toBeTruthy()
expect(module.uploads.length).toBe(0)
expect(module.candidates).not.toBeNull()
expect(Array.isArray(module.candidates)).toBeTruthy()
expect(module.candidates.length).toBe(0)
expect(module.listed).not.toBeNull()
expect(Array.isArray(module.listed)).toBeTruthy()
expect(module.listed.length).toBe(0)
})

it('correctly exposes getters', () => {
const module = getModule(FfaListingsModule, appStore)
expect(FfaListingsModule).not.toBeNull()
expect(module).not.toBeNull()
expect(module.namespace).not.toBeNull()
expect(module.namespace).toEqual('ffaListingsModule')
expect(module.uploadedTitles).not.toBeNull()
expect(Array.isArray(module.uploadedTitles)).toBeTruthy()
expect(module.uploadedTitles.length).toBe(0)
expect(module.allTitles).not.toBeNull()
expect(Array.isArray(module.allTitles)).toBeTruthy()
})

it('correctly mutates uploads', () => {
it('correctly mutates candidates', () => {
const module = getModule(FfaListingsModule, appStore)
expect(module.uploads.length).toBe(0)
module.addUpload(f)
expect(module.uploads.length).toBe(1)
expect(module.uploads[0].title).toEqual('title')
module.removeUpload(f)
expect(module.uploads.length).toBe(0)
expect(module.candidates.length).toBe(0)
module.addCandidate(f)
expect(module.candidates.length).toBe(1)
expect(module.candidates[0].title).toEqual('title')
module.removeCandidate(f)
expect(module.candidates.length).toBe(0)
})

it('correctly mutates via action', async () => {

const module = getModule(FfaListingsModule, appStore)
await module.fetchUploads()
expect(module.uploads.length).toBe(5)
expect(module.uploads[0].title).toEqual('title1')
expect(module.uploads[1].title).toEqual('title2')
expect(module.uploads[2].title).toEqual('title3')
expect(module.uploads[3].title).toEqual('title4')
expect(module.uploads[4].title).toEqual('title5')
await module.fetchCandidates()
expect(module.candidates.length).toBe(5)
expect(module.candidates[0].title).toEqual('title1')
expect(module.candidates[1].title).toEqual('title2')
expect(module.candidates[2].title).toEqual('title3')
expect(module.candidates[3].title).toEqual('title4')
expect(module.candidates[4].title).toEqual('title5')
})

it('correctly gets uploaded titles', async () => {
it('correctly promotes candidates', async () => {
const module = getModule(FfaListingsModule, appStore)
await module.fetchUploads()
expect(module.uploadedTitles.length).toBe(5)
expect(module.uploadedTitles[0]).toEqual('title1')
expect(module.uploadedTitles[1]).toEqual('title2')
expect(module.uploadedTitles[2]).toEqual('title3')
expect(module.uploadedTitles[3]).toEqual('title4')
expect(module.uploadedTitles[4]).toEqual('title5')
await module.fetchCandidates()
expect(module.candidates.length).toBe(5)
expect(module.listed.length).toBe(0)
module.promoteCandidate(module.candidates[2])
expect(module.candidates.length).toBe(4)
expect(module.listed.length).toBe(1)
expect(module.listed[0].title).toEqual('title3')
})

it('correctly promotes candidates', async () => {
const module = getModule(FfaListingsModule, appStore)
await module.fetchCandidates()

expect(module.allTitles.indexOf('foo')).toBeLessThan(0)
expect(module.allTitles.indexOf('title1')).toBeGreaterThanOrEqual(0)
module.promoteCandidate(module.candidates[2])
expect(module.allTitles.indexOf('title3')).toBeGreaterThanOrEqual(0)
})
})

0 comments on commit 421aaa6

Please sign in to comment.