Whitebox Testing

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 31

WHITEBOX TESTING

1. Login(Fn-01)
1. <form class="mt-4" method="POST" action="{{route('login')}}">
@csrf
<div class="row">
<div class="col-lg-12">
<div class="form-group">
<label class="text-dark" for="identity">ID</label>
<input class="form-control{{ $errors->has('identity') ? ' is-
invalid' : '' }}" id="identity" type="text" placeholder="masukkan
email atau NIK" name="identity" required autofocus>
</div>
</div>
<div class="col-lg-12">
<div class="form-group">
<label class="text-dark" for="pwd">Kata Sandi</label>
<input class="form-control{{ $errors->has('password') ? ' is-
invalid' : '' }}" id="pwd" type="password" placeholder="masukkan
kata sandi" name="password">
</div>
</div>
2. <div class="col-lg-12 text-center">
<button type="submit" class="btn btn-block btn-
success">Masuk</button>
</div>
</div>
</form>
3. Route::post('login', [ 'as' => 'login', 'uses' =>
'Auth\LoginController@login']);
4. public function login(Request $request)
{

$loginType = filter_var($request->identity,
FILTER_VALIDATE_EMAIL) ? 'email' : 'identity';
$login = [
$loginType => $request->identity,
'password' => $request->password
];
5. if (auth()->attempt($login))
6. return redirect()->route('dashboard');
7. return redirect()->route('login')->with(['error' => 'Autentikasi
gagal!']);}
8. $errors->as('identity')
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('identity') }}</strong>
</span>$errors->as('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('password') }}</strong>
</span>
9. </div>
</div>
</div>
</div>

Basis Jalur
Deskripsi Sukses
Alur Independen
Login menggunakan akun admin
Jalur 1 1-2-3-4-5-7-9 iya
yang terdaftar
Login menggunakan akun admin
Jalur 2 1-2-3-4-5-6-8-9 iya
yang belum terdaftar

2. Menambahkan Sekolah (Fn-02)

1. title : 'Form Tambah Sekolah',


label : 'ti-plus',
id : 'form-sekolah',
content : _formfield.render({
element : 'form-new',
width : ['sm-12', 'md-8', 'lg-5'],
fields : [
{name:'tingkatan',type : 'select', values:schools},
{name:'ruang',type : 'text',placeholder:'jumlah ruang setiap
kelas'},
{name:'siswa',type : 'text',placeholder:'jumlah siswa setiap
ruang'},
{type:'empty'},
{type:'submit', placeholder: 'tambah'},
]
})[0],
_form.for({
submit : 'form-new-ip-4-submit',
elements : ['form-new-ip-0','form-new-ip-1','form-new-ip-2'],
optional : {},
alias : {},
func : function (elements) {
_transition.in();
const tempData = _formdata.make(elements);
_response.post({async:false,url:'{{url('insertLevel')}}',data:tempD
ata[0], file: tempData[1]});
2. if (_response.response._status) {
3. const school = _response.response;
const name = 'data-'+school.name;
const content = document.createElement('div');
content.setAttribute('class', 'pt-4 pb-4 mt-4 mb-4 text-center
text-muted');
content.innerText = 'pendaftaran belum dibuka';
_sidebar.add('list-pendaftaran', school);
_sidebar.add('list-data', school);
_navcard.update('amount_levels',level._len + 1);
_navcard.success('amount_levels',1);
4. if (_select.hasOne('form-new-ip-0')) {
5. _card.hide('form-sekolah');
}
6. _card.focus('data-sekolah');
_select.remove('form-new-ip-0', tempData[0]['tingkatan']);
_tables.insert({
element : 'level-data',
column : [
{content: school.name},
{content: school.grades.length},
{content: 'tidak ada'},
{content: 'tidak ada'},
{content: 'tidak ada'},
{content: _delete.render(
function (e) {
_popup.content({
id : 'popup-delete-level',
header : '<strong>hapus sekolah</strong>',
content : '<p>apakah anda yakin ingin menghapus <code class="font-
weight-bold">'+school.name.toUpperCase()+'</code> dari sistem?
</p>',
footer : _btn_group.make([
_btn.render({
operate : 'batal',
type : 'success',
title : 'batal',
content : 'batal',
fun : function () {
_popup.close('popup-delete-level');
}
}),
_btn.render({
operate : 'hapus',
type : 'secondary',
title : 'hapus',
content : 'hapus',
fun : function () {
_popup.close('popup-delete-level');
_transition.in();
let row = e.target;
while (row.tagName !== 'TR') {row = row.parentElement;}
_tables.touch('level-data', row.getAttribute('data-row'));
_response.post({async:false, url:'{{url('deleteLevel')}}', data:
{level:school.name}, file:new FormData()});
7. if (_response.response._status) {
8. _card.show('form-sekolah');
_navcard.update('amount_levels', level._len - 1);
_navcard.danger('amount_levels', 1);
_tables.remove();
_card.remove('data-' + school.name);
_sidebar.remove('list-pendaftaran', school.id);
_sidebar.remove('list-data', school.id);
_select.add('form-new-ip-0',
{value:school.name,label:school.name.toUpperCase()});
}
level.refresh();
_transition.out();
}
}),
]),
type : 'secondary',
});
})
},
],
});
Route::post('insertLevel', 'LevelController@insert');
public function insert(Request $request): JsonResponse {
9. if (Level::all()->where('name', $request->tingkatan)->count() == 0)
{
10. $level = _School::make($request->tingkatan, $request->ruang,
$request->siswa);
$level = Level::with(['grades', 'grades.groups'])->firstWhere('id',
$level->id);
return response()->json($level);
}
11. else {
$data = (object) null;
return response()->json($data);
}
}
12. _tagger.tag(name);
_card.render({
element : name,
items : [
{
title : 'Data <span class="text-uppercase">'+school.name+'</span>',
label : 'ti-user',
id : 'data-'+school.name,
content : content
},
],
});
}
level.refresh();
_transition.out();
}
});

Basis Jalur
Deskripsi Sukses
Alur Independen
Menambahkan data sekolah baru
1-2-3-4-5-6-7-8-9-10-
Jalur 1 dengan input yang sesuai dengan iya
11-12
tipe data
Koneksi dengan server terputus
Jalur 2 1-4-5-6-7-11-12 dimana response mengembalikan iya
nilai ‘false’
Admin berusaha menambahkan
Jalur 3 1-6-7-9-10-11-12 iya
sekolah dengan quota kosong
Jalur 4 1-4-5-6-7-8-9-10-11-12 Admin berusaha menambahkan iya
sekolah dengan nama yang sudah
ada
Penanganan kesalahan pada sisi
Jalur 5 1-6-7-8-9-10-11-12 server dimana hasil request iya
mengembalikan status ‘error’

3. Test Case (Fn-03)

1. Route::get('/manage/{type}','Controller@manage')->name('manage');
public function manage($type) {
$level =
Level::with(['students','students.grade','students.group','students
.registrations'])->where('name', $type)->first()->toJson();
$data = (object) null;
$data->title = 'Pendaftaran ' . strtoupper($type);
$data->type = $type;
$data->level = $level;
return view('admin.manage', compact('data'));
}
window._obj_level = {!! $data->level !!};
window.card_content = '<div class="pt-4 pb-4 mt-4 mb-4 text-center
text-muted">pendaftaran belum dibuka</div>';
window.secondary = {
text : '<p><span class="text-uppercase">{{$data->type}}</span> pada
{{env('APP_NAME')}} dapat menerima calon peserta didik hingga <code
class="font-weight-bold">'+(_obj_level.quota * _obj_level.room)
+'</code> orang dimana tiap kelas memiliki <code class="font-
weight-bold">'+_obj_level.room+'</code> ruang dengan quota <code
class="font-weight-bold">'+_obj_level.quota+'</code> orang. Klik
tombol <small class="bg-secondary text-white pt-1 pb-1 pl-2 pr-2
rounded">tutup</small> untuk menutup akses pendaftaran dan
menyimpannya sebagai arsip.</p>',
btn : 'tutup',
role : 2,
fun : function () {
_popup.content({
id : 'popup-close-access',
header : '<strong>tutup akses pendaftaran</strong>',
content : '<p>apakah anda yakin ingin menghapus <code class="font-
weight-bold">{{strtoupper($data->type)}}</code> dari sistem?</p>',
footer : _btn_group.make([
_btn.render({
operate : 'batal',
type : 'success',
title : 'batal',
content : 'batal',
fun : function () {
_popup.close('popup-close-access');
}
}),
_btn.render({
operate : 'tutup',
type : 'secondary',
title : 'tutup',
content : 'tutup',
fun : function () {
_popup.close('popup-close-access');
_transition.in();
_switcher.switch('switch-akses');
_response.post({async:false, url:'{{url('close')}}',data:
{id:_obj_level.id}, file:new FormData()});
2. if (_response.response._status) {
3. window._obj_level = _response.response;
_card.remove('card-tabel-pendaftaran');
_tagger.tag('card-tabel-pendaftaran');
window.card_content = '<div class="pt-4 pb-4 mt-4 mb-4 text-center
text-muted">pendaftaran belum dibuka</div>';
_card.render({
element : 'card-tabel-pendaftaran',
items : [
{
title : 'Data Pendaftaran <span class="text-uppercase">{{$data-
>type}}</span>',
label : 'ti-user',
id : 'tabel-pendaftaran',
content : card_content,
}
],
});
}
4. _transition.out();
}
}),
]),
});
}
}
window.primary = {
text : '<p><span class="text-uppercase">{{$data->type}}</span> pada
{{env('APP_NAME')}} dapat menerima calon peserta didik hingga <code
class="font-weight-bold">'+(_obj_level.quota * _obj_level.room)
+'</code> orang dimana tiap kelas memiliki <code class="font-
weight-bold">'+_obj_level.room+'</code> ruang dengan quota <code
class="font-weight-bold">'+_obj_level.quota+'</code> orang. Klik
tombol <small class="bg-success text-white pt-1 pb-1 pl-2 pr-2
rounded">buka</small> untuk membuka akses pendaftaran.</p>',
btn : 'buka',
role : 1,
fun : function () {
_transition.in();
_response.post({async:false, url:'{{url('open')}}',data:
{id:_obj_level.id}, file:new FormData()});
5. if (_response.response._status) {
6. window._obj_level = _response.response;
_card.remove('card-tabel-pendaftaran');
_tagger.tag('card-tabel-pendaftaran');
window.card_content = _tables.render({
element : 'table-{{$data->type}}',
template : 'custom',
column : [
{content : 'Profil'},
{content : 'Tempat / Tanggal Lahir'},
{content : 'Kelas / Ruang'},
{content : 'Token'},
{content : 'Aksi'},
],
});
_card.render({
element : 'card-tabel-pendaftaran',
items : [
{
title : 'Data Pendaftaran <span class="text-uppercase">{{$data-
>type}}</span>',
label : 'ti-user',
id : 'tabel-pendaftaran',
content : card_content,
}
],
});
7. _switcher.switch('switch-akses');
_transition.out();
}
}
8. if (_obj_level.open) {
9. let temp = window.primary;
window.primary = window.secondary;
window.secondary = temp;
window.card_content = _tables.render({
element : 'table-{{$data->type}}',
template : 'custom',
column : [
{content : 'Profil'},
{content : 'Tempat / Tanggal Lahir'},
{content : 'Kelas / Ruang'},
{content : 'Token'},
{content : 'Aksi'},
],
});
}
10. _card.render({
element : 'card-akses-pendaftaran',
items : [
{
title : 'Akses Pendaftaran',
label : 'ti-user',
id : 'akses-pendaftaran',
content : _switcher.render({
id : 'switch-akses',
primary : window.primary,
secondary : window.secondary,
}),
}
],
});
_card.render({
element : 'card-tabel-pendaftaran',
items : [
{
title : 'Data Pendaftaran <span class="text-uppercase">{{$data-
>type}}</span>',
label : 'ti-user',
id : 'tabel-pendaftaran',
content : card_content,
}
],
});
11. if (_obj_level.open && _obj_level.students.length > 0) {
12. const students = _obj_level.students;
let verified_row = [],
nonverified_row = [];
13. for (let i = 0; i < students.length; i++) {
14. if (students[i].registrations[0].verified)
15. verified_row.push(students[i]);
16. else
nonverified_row.push(students[i]);
17. }
18. insertTable(nonverified_row);
insertTable(verified_row);
}
19. _tagger.tag('popup-delete-record');
_popup.init({element : 'popup-delete-record', align : 'center'});
_tagger.tag('popup-close-access');
_popup.init({element : 'popup-close-access', align : 'center'});
_transition.out();
Route::post('verify', 'RegistrationController@verify');
Route::post('unverify', 'RegistrationController@unverify');
20. public function verify(Request $request):JsonResponse {
$token = $request->token;
21. if (Registration::all()->where('token', $token)->count() > 0) {
22. $data = Registration::all()->firstWhere('token', $token);
$data->veryfied_by = _Authorize::data()->name;
$data->verified = true;
$data->save();
$data = (object) null;
$data->status = true;
return response()->json($data);
}
23. else {
$data = (object) null;
$data->status = false;
return response()->json($data);
}
24. }

Basis Jalur
Deskripsi Sukses
Alur Independen
Admin mengakses halaman sekolah
1-2-3-4-5-6-7-8-9-10- dimana akses pendaftaran sekolah
Jalur 1 11-12-13-14-15-17-13- yang sedang dibuka lebih dari 1 iya
18-19-20-21-22-24 dan jumlah pendaftar tiap sekolah
lebih dari 1
Admin mengakses halaman sekolah
1-4-5-6-7-8-9-10-11-12- dimana akses pendaftaran sekolah
Jalur 2 13-14-15-17-13-18-19- yang sedang dibuka hanya 1 dan iya
20-21-22-24 jumlah pendaftar tiap sekolah lebih
dari 1
Admin mengakses halaman sekolah
dimana akses pendaftaran sekolah
1-4-7-8-9-10-11-12-18-
Jalur 3 yang sedang dibuka lebih dari 1 iya
19-20-21-22-24
dan jumlah pendaftar tiap sekolah
kosong
Admin mengakses halaman sekolah
1-4-7-8-9-10-11-12-19-
Jalur 4 dimana tidak ada akses iya
20-23-24
pendaftaran yang dibuka
Admin hanya membuka akses
1-2-3-4-5-6-7-10-19-20-
Jalur 5 pendaftaran tanpa melakukan aksi iya
23-24
apapun
1-2-3-4-5-6-7-8-9-10- Admin menghapus salah satu data
Jalur 6 11-12-13-18--19-20-23- pendaftar iya
24
1-2-3-4-7-10-11-12-13- Admin memverifikasi salah satu
Jalur 7 16-17-13-18-19-20-23- data pendaftar iya
24
1-2-3-4-7-10-11-12-13- Admin batal verifikasi salah satu
Jalur 8 16-17-13-16-17-13-18- data pendaftar iya
19-20-24

4. Test Case (Fn-04)

1. Route::get('/data/{type}','Controller@data')->name('data');
2. window._obj_level = {!! $data->level !!};
const archives = _obj_level.archives;
3. for (let i = 0; i < archives.length; i++) {
4. const archive = archives[i];
const studs = archive.studs;
const datename = datemaker(archive.updated_at);
_tagger.tag(datename[1]);
_card.render({
element : datename[1],
items : [
{
title : 'Arsip ' + datename[0],
label : 'ti-user',
id : 'data-' + datename[0],
content : _ui_factory.__general.compact_els('div',[
_btn_group.make([
_delete.render(function (e) {
_popup.content({
id : 'popup-delete-level',
header : '<strong>hapus arsip pendaftaran</strong>',
content : '<p>apakah anda yakin ingin menghapus arsip <code
class="font-weight-bold">'+datename[0]+'</code> dari sistem?</p>',
footer : _btn_group.make([
_btn.render({
operate : 'batal',
type : 'success',
title : 'batal',
content : 'batal',
fun : function () {
_popup.close('popup-delete-record');
}
}),
_btn.render({
operate : 'hapus',
type : 'secondary',
title : 'hapus',
content : 'hapus',
fun : function () {
_popup.close('popup-delete-record');
_transition.in();
_response.post({async:false, url:'{{url('deleteReport')}}', data:
{id:archive.id}, file:new FormData()});
5. if (_response.response._status) {
6. let target = e.target;
let parent = target.parentNode;
parent.removeChild(target);
}
7. _transition.out();
}
}),
]),
});
}),
_btn.render({
type : 'success',
title : 'cetak laporan',
operate : 'cetak',
content : 'cetak laporan',
fun : function (e) {
const win = window.open('{{url('/report')}}/' + archive.id,
'_blank');
win.focus();
}
}),
]),
_tables.render({
element : 'table-' + datename[0],
template : 'custom',
column : [
{content : 'Profil'},
{content : 'Tempat / Tanggal Lahir'},
{content : 'Kelas / Ruang'},
{content : 'Tanggal Daftar'},
],
}),
]),
}
],
});
8. _tagger.tag('popup-delete-record');
_popup.init({element : 'popup-delete-record', align :
'center',});
_transition.out();
9. Route::post('clearRegistration', 'RegistrationController@clear');
public function clear(Request $request):JsonResponse {
$regists = Registration::whereHas('student.levels', function($q)
use ($request){
$q->where('name', '=', $request->name);
})->get();
$regist->delete();
$data = (object) null;
$data->status = true;
return response()->json($data);
}

Basis Jalur
Deskripsi Sukses
Alur Independen
Membuka halaman riwayat sekolah
dimana terdapat 1 atau lebih
Jalur 1 1-2-3-4-5-6-7-3-8-9 iya
pendaftaran dan admin melakukan
penghapusan data
Membuka halaman riwayat sekolah
Jalur 2 1-2-3-4-7-3-8-9 dimana terdapat 1 atau lebih iya
pendaftaran
Jalur 3 1-2-3-8-9 Tidak ada riwayat pendaftaran iya

5. Test Case (Fn-05)


1. _btn.render({
type : 'success',
title : 'cetak laporan',
operate : 'cetak',
content : 'cetak laporan',
fun : function (e) {
const win = window.open('{{url('/report')}}/' + archive.id,
'_blank');
win.focus();
}
}),
2. Route::get('/report/{type}','Controller@report')->name('report');
3. public function report($type) {
$archive = Archive::with(['level','studs'])->firstWhere('id',
$type);
$data = (object) null;
$data->type = $archive->level->name;
$data->date = _Archive::date($archive->updated_at);
$data = array($data, $archive);

return view('admin.report', compact('data'));


}
4. <div class="break">
<div id="header">
<h2>ARSIP PENDAFTARAN</h2>
<div id="logo-section">
<img id="img-logo" src="{{asset(env('ICON_PATH'))}}" alt="">
</div>
<div id="title-section">
<h3>CALON PESERTA DIDIK BARU {{strtoupper($data[0]->type)}}
{{env('CLIENT_ORGANIZATION')}} {{env('CLIENT_CITY')}}</h3>
<h5>{{env('CLIENT_ADDRESS')}} - {{env('CLIENT_REGION')}}. Telp
{{env('CLIENT_TELP')}}, Email {{env('CLIENT_EMAIL')}}</h5>
</div>
</div>
<hr>
<div class="top">
<table>
<tr>
<td><strong>Tanggal&nbsp;</strong></td>
<td><strong> : </strong></td>
<td><strong>{{$data[0]->date[2].' '.$data[0]->date[1].' '.$data[0]-
>date[0]}}</strong></td>
</tr>
<tr>
<td><strong>Angkatan</strong></td>
<td><strong> : </strong></td>
<td><strong>{{$data[0]->date[0]}}</strong></td>
</tr>
</table>
</div>
<div class="peserta-data">
<div class="table-id"><strong>Data Calon : </strong></div>
<div class="rp-table-container">
<table class="rp-table">
<thead>
<tr>
<td>No.</td>
<td>Nama Lengkap</td>
<td>NIK</td>
<td>Jenis Kelamin</td>
<td>Kelas</td>
<td>Tanggal Daftar</td>
</tr>
</thead>
<tbody>
@php
$students = $data[1]->studs;
$iter = 0;
@endphp
5. @foreach($students as $student)
6. @php
$studdate = \App\Http\back\_Archive::date($student->register_time);
$studdate = $studdate[2].' '.$studdate[1].' '.$studdate[0];
$iter++;
@endphp
<tr>
<td>{{$iter}}.</td>
<td>&nbsp;&nbsp;{{$student->name}}</td>
<td>&nbsp;&nbsp;{{$student->citizen_identity}}</td>
<td>{{$student->gender}}</td>
<td>{{$student->grade.'/'.strtoupper($student->group)}}</td>
<td>{{$studdate}}</td>
</tr>
7. @endforeach
8. </tbody>
</table>
</div>
</div>
</div>
<script>
const read = () => {
window.print();
};
setTimeout(read, 1000);
</script>
Basis Jalur
Deskripsi Sukses
Alur Independen
Sekolah memiliki riwayat
Jalur 1 1-2-3-4-5-6-5-7-8 pendaftaran dimana jumlah iya
pendaftar > 0
Sekolah memiliki riwayat
Jalur 2 1-2-3-4-5-7-8 pendaftaran dimana tidak ada iya
jumlah pendaftar
Sekolah tidak memiliki riwayat
Jalur 3 1-2-3-4-7-8 iya
pendaftaran

6. Test Case (Fn-06)


1. Route::get('/', function () {return view('welcome');});
2. <script>
const levels = _data.level;
levels.refresh(function ()
{_response.get('{{url('/levels')}}',false);return
_response.response;});
</script>
3. <div class="container-fluid pt-5">
<div class="row pt-5">
<div class="col-lg-2 col-md-1"></div>
<div class="col-lg-8 col-md-10">
<h1 id="daftar" class="card-title text-center pt-5 pb-5">Formulir
Pendaftaran</h1>
<div class="row">
<div class="col-lg-2 col-md-1"></div>
<div id="card-fill" class="col-lg-8 col-md-10">
<div class="form-group">
<div class="card-title h4" style="margin-bottom: -0.5rem">
<div class="row">
<div class="col-3" id="tab-title-anak">
Data Anak
</div>
<div class="col-3" id="tab-title-ayah">
Data Ayah
</div>
<div class="col-3" id="tab-title-ibu">
Data Ibu
</div>
<div class="col-3" id="tab-title-pembayaran">
Pembayaran
</div>
</div>
</div>
<hr>
<div id="tab-body-anak">
<label for="form-nama" class="d-none"></label>
<h6 class="h6 text-dark mt-4 mb-2 small">nama lengkap calon
siswa</h6>
<input id="form-nama" type="text" class="form-control"
placeholder="nama">
<label for="form-nik" class="d-none"></label>
<h6 class="h6 text-dark mt-4 mb-2 small">nomor induk kependudukan
calon siswa</h6>
<input id="form-nik" type="text" class="form-control"
placeholder="NIK">
<h6 class="h6 text-dark mt-4 mb-2 small">jenis kelamin</h6>
<div>
<div class="form-check form-check-inline mr-5">
<input class="form-check-input mr-4" type="radio"
name="jenisKelamin" id="form-jenis-kelamin-1" value="laki-laki"
checked>
<label class="form-check-label" for="form-jenis-kelamin-1">Laki-
laki</label>
</div>
<div class="form-check form-check-inline ml-5">
<input class="form-check-input mr-4" type="radio"
name="jenisKelamin" id="form-jenis-kelamin-2" value="perempuan">
<label class="form-check-label" for="form-jenis-kelamin-
2">Perempuan</label>
</div>
</div>
<h6 class="h6 text-dark mt-4 mb-2 small">tempat tanggal lahir</h6>
<div class="row">
<div class="col-2">
<label for="form-tanggal-lahir-siswa" class="d-none"></label>
<select name="" id="form-tanggal-lahir-siswa" class="form-control">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>
</div>
<div class="col-3">
<label for="form-bulan-lahir-siswa" class="d-none"></label>
<select name="" id="form-bulan-lahir-siswa" class="form-control">
<option value="januari">januari</option>
<option value="februari">februari</option>
<option value="maret">maret</option>
<option value="april">april</option>
<option value="mei">mei</option>
<option value="juni">juni</option>
<option value="juli">juli</option>
<option value="agustus">agustus</option>
<option value="september">september</option>
<option value="oktober">oktober</option>
<option value="november">november</option>
<option value="desember">desember</option>
</select>
</div>
<div class="col-2">
<label for="form-tahun-lahir-siswa" class="d-none"></label>
<input id="form-tahun-lahir-siswa" type="text" class="form-control"
placeholder="tahun">
</div>
<div class="col-5">
<label for="form-tempat-lahir-siswa" class="d-none"></label>
<input id="form-tempat-lahir-siswa" type="text" class="form-
control" placeholder="tempat">
</div>
</div>
<label for="form-alamat-siswa" class="d-none"></label>
<h6 class="h6 text-dark mt-4 mb-2 small">alamat lengkap calon
siswa</h6>
<input id="form-alamat-siswa" type="text" class="form-control"
placeholder="alamat">
<h6 class="h6 text-dark mt-4 mb-2 small">tujuan pendidikan
<code>tingkatan / kelas / ruang</code></h6>
<div class="row">
<div class="col-4">
<label for="form-tingkatan-siswa" class="d-none"></label>
<select name="" id="form-tingkatan-siswa" class="form-control">
</select>
</div>
<div class="col-4">
<label for="form-kelas-siswa" class="d-none"></label>
<select name="" id="form-kelas-siswa" class="form-control">
</select>
</div>
<div class="col-4">
<label for="form-ruang-siswa" class="d-none"></label>
<select name="" id="form-ruang-siswa" class="form-control">
</select>
</div>
</div>
<h6 class="h6 text-dark mt-4 mb-2 small">status anak</h6>
<div>
<div class="form-check form-check-inline mr-5">
<input class="form-check-input mr-4" type="radio"
name="status_anak" id="form-status-anak-1" value="anak kandung"
checked>
<label class="form-check-label" for="form-status-anak-
1">Kandung</label>
</div>
<div class="form-check form-check-inline ml-5">
<input class="form-check-input mr-4" type="radio"
name="status_anak" id="form-status-anak-2" value="anak angkat">
<label class="form-check-label" for="form-status-anak-
2">Angkat</label>
</div>
</div>
<h6 class="h6 text-dark mt-4 mb-2 small">Foto profil <code>dalam
ukuran 3x4</code></h6>
<div class="input-group">
<div class="custom-file">
<input type="file" class="custom-file-input" id="form-foto">
<label class="custom-file-label" for="form-foto">Pilih
Berkas</label>
</div>
</div>
<hr>
</div>
<div id="tab-body-ayah">
<label for="form-nama-ayah" class="d-none"></label>
<h6 class="h6 text-dark mt-4 mb-2 small">nama lengkap ayah</h6>
<input id="form-nama-ayah" type="text" class="form-control"
placeholder="nama">
<label for="form-nik-ayah" class="d-none"></label>
<h6 class="h6 text-dark mt-4 mb-2 small">nomor induk kependudukan
ayah</h6>
<input id="form-nik-ayah" type="text" class="form-control"
placeholder="NIK">
<h6 class="h6 text-dark mt-4 mb-2 small">tempat tanggal lahir</h6>
<div class="row">
<div class="col-2">
<label for="form-tanggal-lahir-ayah" class="d-none"></label>
<select name="" id="form-tanggal-lahir-ayah" class="form-control">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>
</div>
<div class="col-3">
<label for="form-bulan-lahir-ayah" class="d-none"></label>
<select name="" id="form-bulan-lahir-ayah" class="form-control">
<option value="januari">januari</option>
<option value="februari">februari</option>
<option value="maret">maret</option>
<option value="april">april</option>
<option value="mei">mei</option>
<option value="juni">juni</option>
<option value="juli">juli</option>
<option value="agustus">agustus</option>
<option value="september">september</option>
<option value="oktober">oktober</option>
<option value="november">november</option>
<option value="desember">desember</option>
</select>
</div>
<div class="col-2">
<label for="form-tahun-lahir-ayah" class="d-none"></label>
<input id="form-tahun-lahir-ayah" type="text" class="form-control"
placeholder="tahun">
</div>
<div class="col-5">
<label for="form-tempat-lahir-ayah" class="d-none"></label>
<input id="form-tempat-lahir-ayah" type="text" class="form-control"
placeholder="tempat">
</div>
</div>
<label for="form-alamat-ayah" class="d-none"></label>
<h6 class="h6 text-dark mt-4 mb-2 small">alamat lengkap ayah</h6>
<input id="form-alamat-ayah" type="text" class="form-control"
placeholder="alamat">
<label for="form-no-hp-ayah" class="d-none"></label>
<h6 class="h6 text-dark mt-4 mb-2 small">nomor telepon ayah</h6>
<input id="form-no-hp-ayah" type="text" class="form-control"
placeholder="nomor telepon">
<label for="form-email-ayah" class="d-none"></label>
<h6 class="h6 text-dark mt-4 mb-2 small">alamat e-mail ayah</h6>
<input id="form-email-ayah" type="text" class="form-control"
placeholder="e-mail">
<label for="form-pekerjaan-ayah" class="d-none"></label>
<h6 class="h6 text-dark mt-4 mb-2 small">pekerjaan ayah</h6>
<input id="form-pekerjaan-ayah" type="text" class="form-control"
placeholder="pekerjaan">
<label for="form-penghasilan-ayah" class="d-none"></label>
<h6 class="h6 text-dark mt-4 mb-2 small">penghasilan ayah <code>per
bulan</code></h6>
<input id="form-penghasilan-ayah" type="text" class="form-control"
placeholder="penghasilan (rupiah)">
</div>
<div id="tab-body-ibu">
<label for="form-nama-ibu" class="d-none"></label>
<h6 class="h6 text-dark mt-4 mb-2 small">nama lengkap ibu</h6>
<input id="form-nama-ibu" type="text" class="form-control"
placeholder="nama">
<label for="form-nik-ibu" class="d-none"></label>
<h6 class="h6 text-dark mt-4 mb-2 small">nomor induk kependudukan
ibu</h6>
<input id="form-nik-ibu" type="text" class="form-control"
placeholder="NIK">
<h6 class="h6 text-dark mt-4 mb-2 small">tempat tanggal lahir</h6>
<div class="row">
<div class="col-2">
<label for="form-tanggal-lahir-ibu" class="d-none"></label>
<select name="" id="form-tanggal-lahir-ibu" class="form-control">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>
</div>
<div class="col-3">
<label for="form-bulan-lahir-ibu" class="d-none"></label>
<select name="" id="form-bulan-lahir-ibu" class="form-control">
<option value="januari">januari</option>
<option value="februari">februari</option>
<option value="maret">maret</option>
<option value="april">april</option>
<option value="mei">mei</option>
<option value="juni">juni</option>
<option value="juli">juli</option>
<option value="agustus">agustus</option>
<option value="september">september</option>
<option value="oktober">oktober</option>
<option value="november">november</option>
<option value="desember">desember</option>
</select>
</div>
<div class="col-2">
<label for="form-tahun-lahir-ibu" class="d-none"></label>
<input id="form-tahun-lahir-ibu" type="text" class="form-control"
placeholder="tahun">
</div>
<div class="col-5">
<label for="form-tempat-lahir-ibu" class="d-none"></label>
<input id="form-tempat-lahir-ibu" type="text" class="form-control"
placeholder="tempat">
</div>
</div>
<label for="form-alamat-ibu" class="d-none"></label>
<h6 class="h6 text-dark mt-4 mb-2 small">alamat lengkap ibu</h6>
<input id="form-alamat-ibu" type="text" class="form-control"
placeholder="alamat">
<label for="form-no-hp-ibu" class="d-none"></label>
<h6 class="h6 text-dark mt-4 mb-2 small">nomor telepon ibu</h6>
<input id="form-no-hp-ibu" type="text" class="form-control"
placeholder="nomor telepon">
<label for="form-email-ibu" class="d-none"></label>
<h6 class="h6 text-dark mt-4 mb-2 small">alamat e-mail ibu</h6>
<input id="form-email-ibu" type="text" class="form-control"
placeholder="e-mail">
<label for="form-pekerjaan-ibu" class="d-none"></label>
<h6 class="h6 text-dark mt-4 mb-2 small">pekerjaan ibu</h6>
<input id="form-pekerjaan-ibu" type="text" class="form-control"
placeholder="pekerjaan">
<label for="form-penghasilan-ibu" class="d-none"></label>
<h6 class="h6 text-dark mt-4 mb-2 small">penghasilan ibu <code>per
bulan</code></h6>
<input id="form-penghasilan-ibu" type="text" class="form-control"
placeholder="penghasilan (rupiah)">
</div>
<div id="tab-body-pembayaran">
<h6 class="h6 text-dark mt-4 mb-2 small">Foto hasil transfer
<code>dalam bentuk gambar</code></h6>
<div class="input-group">
<div class="custom-file">
<input type="file" class="custom-file-input" id="form-transaksi">
<label class="custom-file-label" for="form-transaksi">Pilih
Berkas</label>
</div>
</div>
<label for="form-token" class="d-none"></label>
<h6 class="h6 text-dark mt-4 mb-2 small">Token pendaftaran calon
siswa. <code>Token dapat digunakan untuk mengecek status
pendaftaran calon siswa</code></h6>
<input id="form-token" type="text" class="form-control"
value="hHweo89He_u324F2_2d" readonly>
<div class="form-check form-check-inline mt-4 pt-4">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="setuju">
<label class="custom-control-label" for="setuju">Saya setuju
mendaftarkan anak saya <span id="nama-calon"></span> pada <span
id="tingkatan-calon"></span> Yayasan Ummul Qurro'.</label>
</div>
</div>
</div>
<div class="row mt-5 mb-5">
<div class="col-6">
<button id="prev-btn" class="btn btn-secondary"
type="button">kembali</button>
</div>
<div class="col-6 text-right">
<button id="next-btn" class="btn btn-secondary"
type="button">berikutnya</button>
<button id="submit-btn" class="btn btn-success"
type="button">daftar</button>
</div>
</div>
</div>
</div>
<div class="col-lg-2 col-md-1"></div>
</div>
</div>
<div class="col-lg-2 col-md-1"></div>
</div>
</div>
4. <script>
5. if (able) {
6. console.log('len = '+levels._len);
tabs.init({prev : 'prev-btn', next : 'next-btn', submit : 'submit-
btn'});
tabs.add([
{title : 'tab-title-anak', body : 'tab-body-anak',},
{title : 'tab-title-ayah', body : 'tab-body-ayah',},
{title : 'tab-title-ibu', body : 'tab-body-ibu',},
{title : 'tab-title-pembayaran', body : 'tab-body-pembayaran',}
]);
collections.set({
name : 'form-daftar',
submit : 'submit-btn',
fields : [
{el:'form-nama', name:'nama_siswa', validator : 'name'},
{el:'form-nik', name:'nik_siswa', validator : 'number'},
{el:['form-jenis-kelamin-1','form-jenis-kelamin-2'],
name:'jenis_kelamin',},
{el:'form-tanggal-lahir-siswa', name:'tanggal_lahir_siswa'},
{el:'form-bulan-lahir-siswa', name:'bulan_lahir_siswa'},
{el:'form-tahun-lahir-siswa', name:'tahun_lahir_siswa', validator:
'year'},
{el:'form-tempat-lahir-siswa', name:'tempat_lahir_siswa',
validator: 'name'},
{el:'form-alamat-siswa', name:'alamat_siswa',},
{el:'form-tingkatan-siswa', name:'tingkatan_siswa',},
{el:'form-kelas-siswa', name:'kelas_siswa',},
{el:'form-ruang-siswa', name:'ruang_siswa',},
{el:['form-status-anak-1','form-status-anak-2'],
name:'status_anak',},
{el:'form-foto', name:'foto_siswa', validator: 'noEmpty'},
{el:'form-nama-ayah', name:'nama_ayah', validator: 'name'},
{el:'form-nik-ayah', name:'nik_ayah', validator: 'number'},
{el:'form-tanggal-lahir-ayah', name:'tanggal_lahir_ayah'},
{el:'form-bulan-lahir-ayah', name:'bulan_lahir_ayah'},
{el:'form-tahun-lahir-ayah', name:'tahun_lahir_ayah', validator:
'year'},
{el:'form-tempat-lahir-ayah', name:'tempat_lahir_ayah', validator:
'name'},
{el:'form-alamat-ayah', name:'alamat_ayah',},
{el:'form-no-hp-ayah', name:'no_hp_ayah', validator: 'phone'},
{el:'form-email-ayah', name:'email_ayah', validator: 'email'},
{el:'form-pekerjaan-ayah', name:'pekerjaan_ayah',},
{el:'form-penghasilan-ayah', name:'penghasilan_ayah', validator:
'number'},
{el:'form-nama-ibu', name:'nama_ibu', validator: 'name'},
{el:'form-nik-ibu', name:'nik_ibu', validator: 'number'},
{el:'form-tanggal-lahir-ibu', name:'tanggal_lahir_ibu'},
{el:'form-bulan-lahir-ibu', name:'bulan_lahir_ibu'},
{el:'form-tahun-lahir-ibu', name:'tahun_lahir_ibu', validator:
'year'},
{el:'form-tempat-lahir-ibu', name:'tempat_lahir_ibu', validator:
'name'},
{el:'form-alamat-ibu', name:'alamat_ibu',},
{el:'form-no-hp-ibu', name:'no_hp_ibu', validator: 'phone'},
{el:'form-email-ibu', name:'email_ibu', validator: 'email'},
{el:'form-pekerjaan-ibu', name:'pekerjaan_ibu',},
{el:'form-penghasilan-ibu', name:'penghasilan_ibu', validator:
'number'},
{el:'form-transaksi', name: 'transaksi', validator: 'noEmpty'},
{el:'form-token', name: 'token'},
{el:'setuju', name: 'setuju', validator: 'check'},
],
});
_school.registration({
level : levels,
sel_level : 'form-tingkatan-siswa',
sel_grade : 'form-kelas-siswa',
sel_group : 'form-ruang-siswa',
});
document.getElementById('form-token').value =
_rand.pass(18,'alphanumeric');
document.getElementById('submit-btn').addEventListener('click',
function () {
const data = collections.collect('form-daftar');
7. Route::post('insertRegistration', 'RegistrationController@insert');
8. public function insert(Request $request): JsonResponse
{
$regist = new Registration();
$student = new Student();
$father = new Paret();
$father->name = $request->nama_ayah;
$father->citizen_identity = $request->nik_ayah;
$father->gender = 'laki-laki';
$father->day_birth = $request->tanggal_lahir_ayah;
$father->month_birth = $request->bulan_lahir_ayah;
$father->year_birth = $request->tahun_lahir_ayah;
$father->place_birth = $request->tempat_lahir_ayah;
$father->address = $request->alamat_ayah;
$father->phone = $request->no_hp_ayah;
$father->email = $request->email_ayah;
$father->occupation = $request->pekerjaan_ayah;
$father->salary = $request->penghasilan_ayah;
$father->save();
$mother = new Paret();
$mother->name = $request->nama_ibu;
$mother->citizen_identity = $request->nik_ibu;
$mother->gender = 'perempuan';
$mother->day_birth = $request->tanggal_lahir_ibu;
$mother->month_birth = $request->bulan_lahir_ibu;
$mother->year_birth = $request->tahun_lahir_ibu;
$mother->place_birth = $request->tempat_lahir_ibu;
$mother->address = $request->alamat_ibu;
$mother->phone = $request->no_hp_ibu;
$mother->email = $request->email_ibu;
$mother->occupation = $request->pekerjaan_ibu;
$mother->salary = $request->penghasilan_ibu;
$mother->save();
$level = Level::all()->firstWhere('id', $request-
>tingkatan_siswa);
$class = Grade::all()->firstWhere('id', $request->kelas_siswa);
$group = Group::all()->firstWhere('id', $request->ruang_siswa);
$student->name = $request->nama_siswa;
$student->citizen_identity = $request->nik_siswa;
$student->gender = $request->jenis_kelamin;
$student->day_birth = $request->tanggal_lahir_siswa;
$student->month_birth = $request->bulan_lahir_siswa;
$student->year_birth = $request->tahun_lahir_siswa;
$student->place_birth = $request->tempat_lahir_siswa;
$student->address = $request->alamat_siswa;
$student->pic = _Image::setProfile($request-
>file('foto_siswa'), $request->nik_siswa);
$student->level()->associate($level);
$student->grade()->associate($class);
$student->group()->associate($group);
$student->save();
$regist->student()->associate($student);
$regist->token = $request->token;
$regist->payment_pic = _Image::setTransaction($request-
>file('transaksi'), $request->nik_siswa, $request->token);
$regist->save();

$wali1 = new Wali();


$wali1->role = $request->status_anak;
$wali1->student()->associate($student);
$wali1->paret()->associate($father);
$wali1->save();

$wali2 = new Wali();


$wali2->role = $request->status_anak;
$wali2->student()->associate($student);
$wali2->paret()->associate($mother);
$wali2->save();

return response()->json($request);
}
9. if (_response.response._status) {
10. document.getElementById('daftar').innerHTML = '';
const card = document.getElementById('card-fill');
card.setAttribute('style', 'margin-bottom:12rem');
card.innerHTML = '<h3 class="h3">Pendaftaran Berhasil !</h3><h4
class="h4 text-black-50">menunggu verifikasi
admin.</h4><hr><p>Proses verifikasi yang dilakukan oleh admin
mungkin membutuhkan waktu beberapa jam. Status verifikasi
pendaftaran dapat dilihat pada alamat <a
href="{{url('/registration')}}/'+_response.response.token+'">
ini</a>.</p>';
}
11. console.log(_response.response);
});
}
12. else {
document.getElementById('daftar').innerHTML = '';
document.getElementById('card-fill').innerHTML = '<h3 class="text-
muted text-center" style="padding-bottom: 12rem">Pendaftaran Belum
Dibuka</h3>';
}
13. </script>
Basis Jalur
Deskripsi Sukses
Alur Independen
Pengunjung membuka web dimana
1-2-3-4-5-6-7-8-9-10- akses pendaftaran sedang dibuka
Jalur 1 iya
11-13 kemudian mengisi form
pendaftaran dan hasilnya sukses
Akses pendaftaran dibuka dan
Jalur 2 1-2-3-4-5-6-7-8-11-13 pengunjung gagal melakukan iya
submit form pendaftaran
Jalur 3 1-2-3-4-12-13 Akses pendaftaran sedang tutup iya

7. Test Case (Fn-07)


1. Route::get('/registration/{token}', 'RegistrationController@item');
2. public function item($token) {
$data =
Registration::with(['student','student.walis','student.walis.paret'
,'student.level','student.grade','student.group'])
->where('token',$token)
->first();
return view('client.registration', compact('data'));
}
3. <script>
window.rec = {!! $data !!};
</script>
4. <div id="card-fill" class="col-lg-8 col-md-10">
<h3 class="h3">Status Pendaftaran</h3>
<h4 class="h4 text-muted">status : <span id="control-status"
class="text-warning"></span></h4>
<hr>
<form class="form-group">
<h6 class="text-dark mt-4">Nama lengkap siswa</h6>
<label for="nama-siswa" class="d-none">Nama</label>
<input class="form-control" type="text" id="nama-siswa"
value="malkolp" disabled>
<h6 class="text-dark mt-4">Nomor Induk Kependudukan Siswa</h6>
<label for="nik" class="d-none">Nama</label>
<input class="form-control" type="text" id="nik" value="malkolp"
disabled>
<h6 class="text-dark mt-4">Tujuan Pendidikan Siswa</h6>
<label for="tujuan-pendidikan" class="d-none">Nama</label>
<input class="form-control" type="text" id="tujuan-pendidikan"
value="malkolp" disabled>
<h6 class="text-dark mt-4">Tanggal Registrasi</h6>
<label for="tanggal-registrasi" class="d-none">Nama</label>
<input class="form-control" type="text" id="tanggal-registrasi"
value="malkolp" disabled>
</form>
<hr>
<p class="text-muted">
Proses verifikasi yang dilakukan oleh admin mungkin membutuhkan
waktu beberapa jam.
</p>
</div>
5. const control_status = document.getElementById('control-status');
const control_nama = document.getElementById('nama-siswa');
const control_nik = document.getElementById('nik');
const control_target = document.getElementById('tujuan-
pendidikan');
const control_tanggal = document.getElementById('tanggal-
registrasi');
control_tanggal.value = day + ' ' + month + ' ' + year;
6. return view('system.404');
7. document.render;
Basis Jalur
Deskripsi Sukses
Alur Independen
Pengguna memasukkan token
Jalur 1 1-2-3-4-5-7 registrasi valid yang sudah iya
terdaftar pada sistem
Pengguna memasukkan token
registrasi yang tidak terdaftar pada
Jalur 2 1-2-6-7 iya
sistem sehingga sistem
mengembalikan status error 404

8. Test Case (Fn-08)


1. const levels = _data.level;
levels.refresh(function ()
{_response.get('{{url('/levels')}}',false);return
_response.response;});
Route::get('/levels', 'LevelController@index');
2. public function index() {
return
Level::with(['grades','grades.groups','students','students.walis','
students.walis.paret','students.level','students.grade','students.g
roup','students.registrations'])->get();
}
3. let able = false;
let nod_ = levels._first;
4. while (nod_ !== undefined) {
5. if (nod_.open) {
6. able = true;
break;
}
7. nod_ = nod_._next;
8. }
_school.registration({
level : levels,
sel_level : 'form-tingkatan-siswa',
sel_grade : 'form-kelas-siswa',
sel_group : 'form-ruang-siswa',
});

Basis Jalur
Deskripsi Sukses
Alur Independen
Akses pendaftaran sekolah yang
Jalur 1 1-2-3-4-5-6-8 dituju berada pada indeks pertama iya
dan akses dibuka
Looping terjadi dimana sekolah
Jalur 2 1-2-3-4-7-4-5-6-8 iya
berada pada indeks != 0
Nilai pada array != undefined tetapi
Jalur 3 1-2-3-4-8 iya
jumlah sekolah dalam array 0
Jalur 4 1-2-3-8 Nilai pada array == undefined iya

You might also like