Skip to content
This repository has been archived by the owner on Sep 7, 2023. It is now read-only.

Commit

Permalink
test: add unit test for content markdown (#727)
Browse files Browse the repository at this point in the history
* chore(deps-dev): add js-yaml package
* test: add unit test for /content/series markdown
* test(songs): add unit test for /content/songs markdown
  • Loading branch information
nogic1008 authored Feb 3, 2023
1 parent f4cdc16 commit 3f5e430
Show file tree
Hide file tree
Showing 18 changed files with 172 additions and 34 deletions.
76 changes: 76 additions & 0 deletions __tests__/content/series.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
import { readdir, readFile } from 'node:fs/promises'
import { basename } from 'node:path'

import { load } from 'js-yaml'
import { describe, expect, test } from 'vitest'

import seriesList from '~~/content/series/.seriesList.json'
import { platforms, regionList, Software } from '~~/src/content'

const dirpath = './content/series'

describe('content/series/', async () => {
const fileNames = (await readdir(dirpath)).filter((s) => s[0] !== '.')

describe.each(fileNames)('%s', async (fileName) => {
const slug = basename(fileName, '.md')
const markdownString = await readFile(`${dirpath}/${fileName}`, {
encoding: 'utf8'
})
const mdcContent = load(
markdownString.match(/^-{3}(.+)-{3}$/ms)![1]
) as Software

test('has valid syntax', () => {
expect(mdcContent).toBeDefined()

expect(mdcContent).toHaveProperty('slug', slug)

expect(mdcContent).toHaveProperty('platform')
expect(platforms).toContain(mdcContent.platform)

expect(mdcContent).toHaveProperty('region')
expect(regionList).toContain(mdcContent.region)

expect(mdcContent).toHaveProperty('launched')
expect(mdcContent.launched).toMatch(/^\d{4}-\d{2}-\d{2}$/)

expect(mdcContent).toHaveProperty('difficulties')
for (const key in mdcContent.difficulties) {
const element = mdcContent.difficulties[key]
expect(element).toHaveProperty('name')
expect(element).toHaveProperty('class')
expect([
'is-primary',
'is-beginner',
'is-basic',
'is-difficult',
'is-expert',
'is-challenge',
'is-unknown'
]).toContain(element.class)
}
})

test('.seriesList.json has property', () => {
expect(Object.keys(seriesList)).toContain(slug)
})

test('uses Chart component correctly', () => {
const chartComponents = markdownString.matchAll(
/:charts\{:difficulties="difficulties" levels="(.+?)" charts="(.+?)"\}/g
)
for (const component of chartComponents) {
const testName = `Match[${component.index}] (${component[0]})`
const levels = component[1].split(',')
const charts = component[2].split(',')
expect(charts, testName).toHaveLength(levels.length)
for (const chart of charts) {
expect(Object.keys(mdcContent.difficulties), testName).toContain(
chart
)
}
}
})
})
})
54 changes: 54 additions & 0 deletions __tests__/content/songs.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import { readdir, readFile } from 'node:fs/promises'
import { basename } from 'node:path'

import { load } from 'js-yaml'
import { describe, expect, test } from 'vitest'

import seriesList from '~~/content/series/.seriesList.json'
import { Song } from '~~/src/content'

const dirpath = './content/songs'

describe('content/songs/', async () => {
const fileNames = (await readdir(dirpath)).filter((s) => s[0] !== '.')

describe.each(fileNames)('%s', async (fileName) => {
const markdownString = await readFile(`${dirpath}/${fileName}`, {
encoding: 'utf8'
})
const mdcContent = load(
markdownString.match(/^-{3}(.+)-{3}$/ms)![1]
) as Song

test('has valid syntax', () => {
expect(mdcContent).toBeDefined()

expect(mdcContent).toHaveProperty('slug', basename(fileName, '.md'))

expect(mdcContent).toHaveProperty('name')

expect(mdcContent).toHaveProperty('artist')
expect(mdcContent).toHaveProperty('from')

expect(mdcContent).toHaveProperty('bpm')
if (typeof mdcContent.bpm === 'string')
expect(mdcContent.bpm).toMatch(/^(\?\?\?|\d+-\d+)$/)

expect(mdcContent).toHaveProperty('series')
for (const s of mdcContent.series) {
expect(Object.keys(seriesList)).toContain(s)
}
})

test('uses Level component correctly', () => {
const levelComponents = markdownString.matchAll(
/:level\{slug="(.+?)" level="?(.+?)"?\}/g
)
for (const component of levelComponents) {
const testName = `Match[${component.index}] (${component[0]})`
expect(mdcContent.series, testName).toContain(component[1])
expect(component[2], testName).toMatch(/^\d+(\.5)?|\?|10\+$/)
}
})
})
})
2 changes: 1 addition & 1 deletion content/series/ext-us.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ difficulties:
|[MOBO★MOGA](/songs/mobo-moga)|Orange Lounge|172|:charts{:difficulties="difficulties" levels="1,3,6,7" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="3,6,7" charts="1,2,3"}|
|[Move Your Feet](/songs/move-your-feet)|Junior Senior|118|:charts{:difficulties="difficulties" levels="1,3,5,7" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="3,5,7" charts="1,2,3"}|
|[Music (Bostik Radio Edit)](/songs/music-bostik)|Darude|138|:charts{:difficulties="difficulties" levels="1,4,6,8" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="2,6,7" charts="1,2,3"}|
|[NEVER ENDING STORY (Power Club Vocal Mix)](/songs/never-ending-story)|DJ-AC-DC|140|:charts{:difficulties="difficulties" levels="1,4,6,7" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="3,7,8" charts="1,2,3"}|
|[NEVER ENDING STORY (Power Club Vocal Mix)](/songs/never-ending-story)|DJ-AC-DC|140|:charts{:difficulties="difficulties" levels="1,4,6,7" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="3,7,8" charts="1,2,3"}|
|[ON THE JAZZ](/songs/on-the-jazz)|Jonny Dynamite!|130|:charts{:difficulties="difficulties" levels="1,2,5,7" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="3,5,7" charts="1,2,3"}|
|[ONLY YOU](/songs/only-you)|CAPTAIN JACK|93|:charts{:difficulties="difficulties" levels="1,3,4,7" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="3,6,7" charts="1,2,3"}|
|[PARANOiA ETERNAL](/songs/paranoia-eternal)|STM 200|200|:charts{:difficulties="difficulties" levels="2,5,6,9" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="5,6,9" charts="1,2,3"}|
Expand Down
12 changes: 6 additions & 6 deletions content/series/ext2.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ difficulties:
|[As The Rush Comes (Gabriel & Dresden Sweeping Strings Radio Edit)](/songs/as-the-rush-comes)|Motorcycle|136|:charts{:difficulties="difficulties" levels="1,5,6,8" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="5,6,7" charts="1,2,3"}|
|[Block Rockin' Beats](/songs/block-rockin-beats)|Chemical Brothers|110|:charts{:difficulties="difficulties" levels="1,3,6,8" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="3,6,8" charts="1,2,3"}|
|[BOOM BOOM DOLLAR (K.O.G G3 MIX)](/songs/boom-boom-dollar-kogg)|King Kong & D. Jungle Girls|170|:charts{:difficulties="difficulties" levels="1,5,7,8" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="5,7,9" charts="1,2,3"}|
|[butterfly (UPSWING MIX)](/songs/butterfly-upswing)|SMiLE.dk|170|:charts{:difficulties="difficulties" levels="1,4,6,8,9" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="5,7,8,9" charts="1,2,3"}|
|[butterfly (UPSWING MIX)](/songs/butterfly-upswing)|SMiLE.dk|170|:charts{:difficulties="difficulties" levels="1,4,6,8,9" charts="0,1,2,3,4"}|:charts{:difficulties="difficulties" levels="5,7,8,9" charts="1,2,3,4"}|
|[CAPTAIN JACK (GRANDALE REMIX)](/songs/captain-jack)|CAPTAIN JACK|170|:charts{:difficulties="difficulties" levels="1,4,7,9" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="5,7,9" charts="1,2,3"}|
|[CARTOON HEROES (Speedy Mix)](/songs/cartoon-heroes)|BARBIE YOUNG|170|:charts{:difficulties="difficulties" levels="1,4,7,9" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="4,7,9" charts="1,2,3"}|
|[Crazy In Love](/songs/crazy-in-love)|wg feat. Indra J|100|:charts{:difficulties="difficulties" levels="1,3,5,7" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="3,5,6" charts="1,2,3"}|
Expand Down Expand Up @@ -55,11 +55,11 @@ difficulties:
|[Happy Wedding](/songs/happy-wedding)|ASKA|126|:charts{:difficulties="difficulties" levels="1,3,5,7" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="3,5,6" charts="1,2,3"}|
|[Heaven is a '57 metallic gray (gimmix)](/songs/heaven-is-a-57-metallic-gray)|Hiro feat. Sweet little 30's|190|:charts{:difficulties="difficulties" levels="2,4,6,8" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="4,6,8" charts="1,2,3"}|
|[I Need You (Insideout Door Mix)](/songs/i-need-you-insideout-door)|Supa Fova|65-130|:charts{:difficulties="difficulties" levels="1,4,5,7" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="3,7,7" charts="1,2,3"}|
|[INFINITE PRAYER](/songs/infinite-prayer)|L.E.D. LIGHT feat. Goro|137|:charts{:difficulties="difficulties" levels="1,2,6,7,9" charts="0,1,2,3,9"}|:charts{:difficulties="difficulties" levels="2,6,7" charts="1,2,3"}|
|[INFINITE PRAYER](/songs/infinite-prayer)|L.E.D. LIGHT feat. Goro|137|:charts{:difficulties="difficulties" levels="1,2,6,7,9" charts="0,1,2,3,4"}|:charts{:difficulties="difficulties" levels="2,6,7" charts="1,2,3"}|
|[INJECTION OF LOVE (HINA MIX)](/songs/injection-of-love-hina)|AKIRA YAMAOKA|160|:charts{:difficulties="difficulties" levels="1,4,6,7" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="4,6,7" charts="1,2,3"}|
|[INSERTiON (Machine Gun Kelly Mix)](/songs/insertion-machine-gun-kelly)|Thuggie D.|69-139|:charts{:difficulties="difficulties" levels="1,3,5,7" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="3,6,7" charts="6,7,8"}|
|[INSERTiON (Machine Gun Kelly Mix)](/songs/insertion-machine-gun-kelly)|Thuggie D.|69-139|:charts{:difficulties="difficulties" levels="1,3,5,7" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="3,6,7" charts="1,2,3"}|
|[INSIDE YOUR HEART](/songs/inside-your-heart)|AKIRA YAMAOKA|107|:charts{:difficulties="difficulties" levels="1,3,5,6" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="3,5,7" charts="1,2,3"}|
|[KEEP ON MOVIN' (DMX Mix)](/songs/keep-on-movin-dmx)|N.M.R.-typeG|132|:charts{:difficulties="difficulties" levels="1,3,5,7,8" charts="0,1,2,3,13"}|:charts{:difficulties="difficulties" levels="4,5,7" charts="6,7,8"}|
|[KEEP ON MOVIN' (DMX Mix)](/songs/keep-on-movin-dmx)|N.M.R.-typeG|132|:charts{:difficulties="difficulties" levels="1,3,5,7,8" charts="0,1,2,3,4"}|:charts{:difficulties="difficulties" levels="4,5,7" charts="1,2,3"}|
|[La Bamba](/songs/la-bamba)|Mexican Folk Song|179|:charts{:difficulties="difficulties" levels="1,3,5,8" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="4,5,8" charts="1,2,3"}|
|[L'amour et la liberte (DDR ver.)](/songs/l-amour-et-la-liberte)|NAOKI underground|145|:charts{:difficulties="difficulties" levels="1,4,6,8" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="4,6,7" charts="1,2,3"}|
|[LOVE IS ORANGE](/songs/love-is-orange)|Orange Lounge|180|:charts{:difficulties="difficulties" levels="2,4,6,7,8" charts="0,1,2,3,4"}|:charts{:difficulties="difficulties" levels="5,6,7,8" charts="1,2,3,4"}|
Expand All @@ -68,9 +68,9 @@ difficulties:
|[Miracle Moon (L.E.D.LIGHT STYLE MIX)](/songs/miracle-moon)|Togo Project feat. Sana|138|:charts{:difficulties="difficulties" levels="1,3,5,7" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="2,5,7" charts="1,2,3"}|
|[PASSION OF LOVE](/songs/passion-of-love)|NAOKI feat. PAULA TERRY|78-155|:charts{:difficulties="difficulties" levels="1,4,6,7" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="5,6,7" charts="1,2,3"}|
|[Polovtsian Dances And Chorus](/songs/polovtsian-dances-and-chorus)|Naoto Suzuki feat. Martha|146|:charts{:difficulties="difficulties" levels="1,4,6,8" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="4,6,8" charts="1,2,3"}|
|[Quickening](/songs/quickening)|dj TAKA|150|:charts{:difficulties="difficulties" levels="1,3,5,6,8" charts="0,1,2,3,9"}|:charts{:difficulties="difficulties" levels="3,5,7" charts="1,2,3"}|
|[Quickening](/songs/quickening)|dj TAKA|150|:charts{:difficulties="difficulties" levels="1,3,5,6,8" charts="0,1,2,3,4"}|:charts{:difficulties="difficulties" levels="3,5,7" charts="1,2,3"}|
|[SAKURA](/songs/sakura)|RevenG|14-300|:charts{:difficulties="difficulties" levels="3,5,8,10,9" charts="0,1,2,3,4"}|:charts{:difficulties="difficulties" levels="6,8,10,9" charts="1,2,3,4"}|
|[SANA MOLLETE NE ENTE (B.L.T. STYLE)](/songs/sana-mollete-ne-ente-blt)|Togo Project feat. Sana|90-180|:charts{:difficulties="difficulties" levels="2,2,5,7,8" charts="0,1,7,3,9"}|:charts{:difficulties="difficulties" levels="2,5,8" charts="1,2,3"}|
|[SANA MOLLETE NE ENTE (B.L.T. STYLE)](/songs/sana-mollete-ne-ente-blt)|Togo Project feat. Sana|90-180|:charts{:difficulties="difficulties" levels="2,2,5,7,8" charts="0,1,2,3,4"}|:charts{:difficulties="difficulties" levels="2,5,8" charts="1,2,3"}|
|[Saturday Night Love](/songs/saturday-night-love)|Sota feat. Brenda V.|128|:charts{:difficulties="difficulties" levels="1,3,5,6" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="3,5,6" charts="1,2,3"}|
|[SEDUCTION](/songs/seduction)|nc ft. FINALFORCE|95-190|:charts{:difficulties="difficulties" levels="2,5,7,8" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="5,7,8" charts="1,2,3"}|
|[SEXY PLANET](/songs/sexy-planet)|Crystal Aliens|180|:charts{:difficulties="difficulties" levels="2,5,6,7" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="4,5,7" charts="1,2,3"}|
Expand Down
16 changes: 8 additions & 8 deletions content/series/festival.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,23 +64,23 @@ difficulties:
|[BATTLE BREAKS](/songs/battle-breaks)|DJ TAKAWO|112|:charts{:difficulties="difficulties" levels="3,6,7" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="3,5,7" charts="1,2,3"}|
|[FIRE DUB](/songs/fire-dub)|ASLETICS|85|:charts{:difficulties="difficulties" levels="3,5,8" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="4,5,7" charts="1,2,3"}|
|[GET IT ALL](/songs/get-it-all)|BRASS TRICKS|140|:charts{:difficulties="difficulties" levels="4,7,8" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="4,5,8" charts="1,2,3"}|
|[GORGEOUS 2012](/songs/gorgeous-2012)|THE SURRENDERS|135|:charts{:difficulties="difficulties" levels="3,6,7" charts="6,7,8"}|:charts{:difficulties="difficulties" levels="3,5,7" charts="6,7,8"}|
|[GORGEOUS 2012](/songs/gorgeous-2012)|THE SURRENDERS|135|:charts{:difficulties="difficulties" levels="3,6,7" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="3,5,7" charts="1,2,3"}|
|[I Need You -True Platinum Mix](/songs/i-need-you-true-platinum)|Sho-T|130|:charts{:difficulties="difficulties" levels="1,4,5,6" charts="0,1,2,3"}|:charts{:difficulties="difficulties" levels="3,6,7" charts="1,2,3"}|
|[In My Eyes](/songs/in-my-eyes)|riewo|142|:charts{:difficulties="difficulties" levels="3,7,8" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="4,5,6" charts="1,2,3"}|
|[INFINITE PRAYER](/songs/infinite-prayer)|L.E.D. LIGHT feat. Goro|137|:charts{:difficulties="difficulties" levels="2,6,9" charts="1,2,9"}|:charts{:difficulties="difficulties" levels="2,6,7" charts="1,2,3"}|
|[INFINITE PRAYER](/songs/infinite-prayer)|L.E.D. LIGHT feat. Goro|137|:charts{:difficulties="difficulties" levels="2,6,9" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="2,6,7" charts="1,2,3"}|
|[INFINITE PRAYER -floating flock style-](/songs/infinite-prayer-floating-flock)|L.E.D. feat. GORO|120|:charts{:difficulties="difficulties" levels="3,6,8" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="3,6,8" charts="1,2,3"}|
|[INSERTiON (Machine Gun Kelly Mix)](/songs/insertion-machine-gun-kelly)|Thuggie D.|69-139|:charts{:difficulties="difficulties" levels="3,5,7" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="3,6,7" charts="6,7,8"}|
|[KEEP ON MOVIN' (DMX Mix)](/songs/keep-on-movin-dmx)|N.M.R.-typeG|132|:charts{:difficulties="difficulties" levels="3,5,8" charts="1,2,8"}|:charts{:difficulties="difficulties" levels="4,5,7" charts="6,7,8"}|
|[INSERTiON (Machine Gun Kelly Mix)](/songs/insertion-machine-gun-kelly)|Thuggie D.|69-139|:charts{:difficulties="difficulties" levels="3,5,7" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="3,6,7" charts="1,2,3"}|
|[KEEP ON MOVIN' (DMX Mix)](/songs/keep-on-movin-dmx)|N.M.R.-typeG|132|:charts{:difficulties="difficulties" levels="3,5,8" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="4,5,7" charts="1,2,3"}|
|[Keep Ya Body Movin'](/songs/keep-ya-body-movin)|Thuggie D.|95|:charts{:difficulties="difficulties" levels="2,3,5" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="3,4,6" charts="1,2,3"}|
|[MAD BLAST](/songs/mad-blast)|THE INFECTION|180|:charts{:difficulties="difficulties" levels="4,6,10" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="4,7,9" charts="1,2,3"}|
|[MATSURI (J-SUMMER MIX)](/songs/matsuri-j-summer)|RE-VENGE|180|:charts{:difficulties="difficulties" levels="4,5,9" charts="1,2,8"}|:charts{:difficulties="difficulties" levels="4,6,8" charts="6,7,8"}|
|[MATSURI (J-SUMMER MIX)](/songs/matsuri-j-summer)|RE-VENGE|180|:charts{:difficulties="difficulties" levels="4,5,9" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="4,6,8" charts="1,2,3"}|
|[MEANING OF LIFE](/songs/meaning-of-life)|K. Wit feat. GARY|112|:charts{:difficulties="difficulties" levels="3,6,7" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="3,4,6" charts="1,2,3"}|
|[MGS2 mission R](/songs/mgs2-mission-r)|L.E.D.|150|:charts{:difficulties="difficulties" levels="4,5,9" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="4,6,8" charts="1,2,3"}|
|[Mind Parasite](/songs/mind-parasite)|TOMOSUKE|145|:charts{:difficulties="difficulties" levels="3,6,8" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="3,6,8" charts="1,2,3"}|
|[NEMESIS](/songs/nemesis)|D.J. SETUP|164|:charts{:difficulties="difficulties" levels="4,6,8" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="4,6,8" charts="1,2,3"}|
|[PUT YOUR FAITH IN ME (SATURDAY NIGHT MIX)](/songs/put-your-faith-in-me-saturday-night)|UZI-LAY|120|:charts{:difficulties="difficulties" levels="3,6,7" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="3,5,6" charts="6,7,8"}|
|[Quickening](/songs/quickening)|dj TAKA|150|:charts{:difficulties="difficulties" levels="3,5,8" charts="1,2,9"}|:charts{:difficulties="difficulties" levels="3,5,7" charts="1,2,3"}|
|[SANA MOLLETE NE ENTE (B.L.T. STYLE)](/songs/sana-mollete-ne-ente-blt)|Togo Project feat. Sana|90-180|:charts{:difficulties="difficulties" levels="2,7,8" charts="1,2,9"}|:charts{:difficulties="difficulties" levels="2,5,8" charts="1,2,3"}|
|[PUT YOUR FAITH IN ME (SATURDAY NIGHT MIX)](/songs/put-your-faith-in-me-saturday-night)|UZI-LAY|120|:charts{:difficulties="difficulties" levels="3,6,7" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="3,5,6" charts="1,2,3"}|
|[Quickening](/songs/quickening)|dj TAKA|150|:charts{:difficulties="difficulties" levels="3,5,8" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="3,5,7" charts="1,2,3"}|
|[SANA MOLLETE NE ENTE (B.L.T. STYLE)](/songs/sana-mollete-ne-ente-blt)|Togo Project feat. Sana|90-180|:charts{:difficulties="difficulties" levels="2,7,8" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="2,5,8" charts="1,2,3"}|
|[SOMETHING WONDERFUL](/songs/something-wonderful)|L.E.D.|150|:charts{:difficulties="difficulties" levels="3,5,8" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="4,5,8" charts="1,2,3"}|
|[There 4 You](/songs/there-4-you)|Thuggie D.|113|:charts{:difficulties="difficulties" levels="3,5,6" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="3,5,7" charts="1,2,3"}|
|[What is Love?](/songs/what-is-love)|TOMOSUKE|130|:charts{:difficulties="difficulties" levels="3,6,7" charts="1,2,3"}|:charts{:difficulties="difficulties" levels="3,5,7" charts="1,2,3"}|
Expand Down
Loading

0 comments on commit 3f5e430

Please sign in to comment.