Latihan 1 dari materi State Pattern di Design Patterns — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Lengkapi createMachine(stock) supaya mengembalikan object dengan tiga method: insertCoin(), selectProduct(), dan getState(). Mesinnya punya tiga state:
"NoMoney": insertCoin() pindah ke "HasMoney" dan mengembalikan "coin accepted". selectProduct() mengembalikan "insert coin first".
"HasMoney": insertCoin() mengembalikan "coin already inserted". selectProduct() mengurangi stok 1, pindah ke "SoldOut" kalau stoknya jadi 0 atau ke "NoMoney" kalau masih ada, lalu mengembalikan "dispensed".
"SoldOut": insertCoin() dan selectProduct() sama-sama mengembalikan "machine sold out".
getState() mengembalikan nama state yang sedang aktif. State awalnya "NoMoney" kalau stock lebih dari 0, dan "SoldOut" kalau stock 0.
Kode createMachine(1) dan empat console.log di bawahnya sudah ada di starter dan tetap. Console harus mencetak empat baris ini, berurutan:
insert coin first
coin accepted
dispensed
SoldOut
Yang juga dinilai: dengan createMachine(2), urutan selectProduct, insertCoin, selectProduct, insertCoin, selectProduct, lalu getState() harus menghasilkan ["insert coin first","coin accepted","dispensed","coin accepted","dispensed","SoldOut"].