def test_web_notfound_create_position(f_session, f_music):
    payload = {'x': 10, 'y': 9}
    with app.test_client() as client:
        response = client.post(url_for('music.position', id_=f_music.id + 1),
                               data=json.dumps(payload),
                               content_type='application/json')
    assert 404 == response.status_code
def test_web_find_all_pos(f_session, f_position, f_album):
    musics = []
    for x in range(1, 10):
        music = Music(name='music {}'.format(x),
                      album=f_album,
                      track_number=x,
                      disc_number=1)
        f_session.add(music)
        f_session.add(Position(x=randint(1, 100),
                               y=randint(1, 100),
                               music=music))
        musics.append(music)
    f_session.commit()
    url = url_for('music.find_all_positions',
                  music_ids=','.join([str(x.id) for x in musics]))
    with app.test_client() as c:
        r = c.get(url)
    assert 200 == r.status_code
    assert r.data
    data = json.loads(r.data)
    assert data
    assert 'positions' in data
    assert data['positions']
    expect_ids = [x.id for x in musics]
    result_ids = [x['music_id'] for x in data['positions']]
    assert not (set(result_ids) - set(expect_ids))
    for d in data['positions']:
        p = f_session.query(Position)\
            .filter(Position.music_id == d['music_id'])\
            .first()
        assert p
        assert p.x == d['x']
        assert p.y == d['y']
def test_web_no_json_create_music(f_session):
    """ json으로 음악생성
    """
    with app.test_client() as client:
        response = client.post(url_for('music.create'),
                               content_type='application/json')
    assert 400 == response.status_code
def test_web_no_json_create_position(f_session, f_music):
    """ json으로 position(음악의 좌표 데이터)를 생성
    """
    with app.test_client() as client:
        response = client.post(url_for('music.position', id_=f_music.id),
                               content_type='application/json')
    assert 400 == response.status_code
def test_web_find_strange_user(f_session, f_user):
    u = {'id': f_user.id, 'email': f_user.email, 'name': f_user.name}
    t, _ = generate_token(u)
    url = url_for('user.find_user', id_=1231231232, token=t)
    with app.test_client() as c:
        r = c.get(url)
    assert 404 == r.status_code
def test_web_create_user(f_session):
    """ 폼데이터로 유저생성
    """
    mail = '*****@*****.**'
    with app.test_client() as client:
        response = client.post(url_for('user.create_user'),
                               data={'email': mail,
                                     'password': '******'})
    _test_create_user(response, f_session)
def test_web_create_user_by_json(f_session):
    """ json으로 유저생성
    """
    mail = '*****@*****.**'
    with app.test_client() as client:
        response = client.post(url_for('user.create_user'),
                               data=json.dumps({'email': mail,
                                                'password': '******'}),
                               content_type='application/json')
    _test_create_user(response, f_session)
def test_web_find_other_user(f_session, f_user):
    other = User(email='*****@*****.**', password='******')
    f_session.add(other)
    f_session.commit()
    u = {'id': f_user.id, 'email': f_user.email, 'name': f_user.name}
    t, _ = generate_token(u)
    url = url_for('user.find_user', id_=other.id, token=t)
    with app.test_client() as c:
        r = c.get(url)
    assert 403 == r.status_code
def _test_find_user(url, f_user):
    with app.test_client() as c:
        r = c.get(url)
    assert 200 == r.status_code
    assert r.data
    data = json.loads(r.data)
    assert 'id' in data
    assert 'email' in data
    assert 'name' in data
    assert f_user.email == data['email']
    assert f_user.name == data['name']
def test_web_create_music(f_session):
    payload = {
        'music_name': '유감',
        'music_track_number': 1,
        'music_disc_number': 1,
        'artist_name': 'leeSA',
        'album_name': '유감',
        'album_release_year': 2010,
        'genre': '팝 > 팝, 팝 > 발라드'
    }
    with app.test_client() as client:
        response = client.post(url_for('music.create'),
                               data=json.dumps(payload),
                               content_type='application/json')
    # response 상태
    assert 201 == response.status_code
    # artist 데이터 생성 확인
    artist = f_session.query(Artist)\
             .filter(Artist.name == payload['artist_name'])\
             .first()
    assert artist
    assert artist.name
    assert artist.created_at
    assert payload['artist_name'] == artist.name
    # album 데이터 생성 확인
    album = f_session.query(Album)\
            .filter(Album.name == payload['album_name'])\
            .first()
    assert album
    assert album.name
    assert album.created_at
    assert album.year
    assert album.artist_id
    assert artist.id == album.artist.id
    # genre 데이터 생성 확인
    genre = f_session.query(Genre)\
            .filter(Genre.name == payload['genre'])\
            .first()
    assert genre
    assert genre.name
    assert genre.created_at
    # music 데이터 생성 확인
    music = f_session.query(Music)\
            .filter(Music.name == payload['music_name'])\
            .first()
    assert music
    assert music.name == payload['music_name']
    assert music.created_at
    assert music.album_id
    assert album.id == music.album.id
    assert music.genre_id
    assert genre.id == music.genre.id
def test_web_find_position(f_session, f_position):
    url = url_for('music.find_position', id_=f_position.music.id)
    with app.test_client() as client:
        response = client.get(url)
    assert 200 == response.status_code
    assert response.data
    data = json.loads(response.data)
    assert data
    assert 'x' in data
    assert 'y' in data
    assert 'music_id' in data
    assert f_position.x == data['x']
    assert f_position.y == data['y']
    assert f_position.music_id == data['music_id']
def test_web_create_position(f_session, f_music):
    payload = {'x': 10, 'y': 9}
    # position 데이터 생성
    with app.test_client() as client:
        response = client.post(url_for('music.position', id_=f_music.id),
                               data=json.dumps(payload),
                               content_type='application/json')
    #response 상태
    assert 201 == response.status_code
    # position 생성 확인
    position = f_session.query(Position)\
               .filter(Position.music_id == f_music.id)\
               .first()
    assert position
    assert payload['x'] == position.x
    assert payload['y'] == position.y
    assert f_music.id == position.music_id
def test_web_login(f_session, f_user):
    email = '*****@*****.**'
    password = '******'
    with app.test_client() as client:
        response = client.post(url_for('login.login'),
                               data={'email': email, 'password': password})
    assert 200 == response.status_code
    assert response.data
    data = json.loads(response.data)
    assert 'user' in data
    assert 'id' in data['user']
    assert 'email' in data['user']
    assert 'name' in data['user']
    assert 'token' in data
    assert f_user.id == data['user']['id']
    assert f_user.email == data['user']['email']
    assert f_user.name == data['user']['name']
    assert 'token' in data
    user_data = validate_token(data['token'])
    assert f_user.id == user_data['user']['id']
    assert f_user.email == user_data['user']['email']
    assert f_user.name == user_data['user']['name']
def test_web_noquery_all_pos(f_session, f_position):
    url = url_for('music.find_all_positions')
    with app.test_client() as c:
        r = c.get(url)
    assert 400 == r.status_code
def test_web_weired_query_all_pos(f_session, f_position):
    url = url_for('music.find_all_positions', music_ids='hehe,weired')
    with app.test_client() as c:
        r = c.get(url)
    assert 400 == r.status_code
def test_web_notfound_find_position(f_session, f_music):
    url = url_for('music.find_position', id_=f_music.id + 1)
    with app.test_client() as client:
        response = client.get(url)
    assert 404 == response.status_code
def test_web_create_chunk_music(f_session):
    payload = {
        'musics': [
            {
                'music_name': '유감',
                'music_track_number': 1,
                'music_disc_number': 1,
                'artist_name': 'leeSA',
                'album_name': '유감',
                'album_release_year': 2010,
                'genre': '팝 > 팝, 팝 > 발라드'
            },
            {
                'music_name': '유감',
                'music_track_number': 1,
                'music_disc_number': 1,
                'artist_name': 'leeSA',
                'album_name': '유감',
                'album_release_year': 2010,
                'genre': '팝 > 팝, 팝 > 발라드'
            },
            {
                'music_name': 'Could you stop that smile ?',
                'music_track_number': 1,
                'music_disc_number': 1,
                'artist_name': 'leeSA',
                'album_name': '유감',
                'album_release_year': 2010,
                'genre': '팝 > 팝, 팝 > 발라드'
            },
        ]
    }
    with app.test_client() as client:
        response = client.post(url_for('music.create_chunks'),
                               data=json.dumps(payload),
                               content_type='application/json')
    # response 상태
    assert 201 == response.status_code
    # artist 데이터 생성 확인
    artist = f_session.query(Artist)\
             .filter(Artist.name == payload['musics'][0]['artist_name'])\
             .first()
    assert artist
    assert artist.name
    assert artist.created_at
    assert payload['musics'][0]['artist_name'] == artist.name
    print([x.name for x in f_session.query(Artist).all()])
    assert 1 == f_session.query(Artist).count()
    # album 데이터 생성 확인
    album = f_session.query(Album)\
            .filter(Album.name == payload['musics'][0]['album_name'])\
            .first()
    assert album
    assert album.name
    assert album.created_at
    assert album.year
    assert album.artist_id
    assert artist.id == album.artist.id
    assert 1 == f_session.query(Album).count()
    # genre 데이터 생성 확인
    genre = f_session.query(Genre)\
            .filter(Genre.name == payload['musics'][0]['genre'])\
            .first()
    assert genre
    assert genre.name
    assert genre.created_at
    assert 1 == f_session.query(Genre).count()
    # music 데이터 생성 확인
    for v in payload['musics']:
        music = f_session.query(Music)\
                .filter(Music.name == v['music_name'])\
                .first()
        assert music
        assert music.name == v['music_name']
        assert music.created_at
        assert music.album_id
        assert album.id == music.album.id
        assert music.genre_id
        assert genre.id == music.genre.id
    assert 2 == f_session.query(Music).count()
    assert response.data
    data = json.loads(response.data)
    assert 'musics' in data
    assert data['musics']
    exp = [{'id': x.id, 'name': x.name} for x in f_session.query(Music).all()]
    assert exp == data['musics']