package kr.itn.itnhub.code;

import kr.itn.itnhub.AbstractDbTest;
import kr.itn.itnhub.mattermost.MattermostClient;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.web.servlet.MockMvc;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@AutoConfigureMockMvc
class CodeControllerTest extends AbstractDbTest {

    @Autowired
    MockMvc mvc;

    @MockBean
    MattermostClient mattermost;

    @Test
    @WithMockUser(roles = "ADMIN")
    void 전체_코드를_그룹별로_내려준다() throws Exception {
        mvc.perform(get("/api/meta/codes"))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.STAGE.length()").value(13))
                .andExpect(jsonPath("$.STAGE[12].code").value("13"))
                .andExpect(jsonPath("$.STAGE[12].label").value("보고서 제출 완료"))
                .andExpect(jsonPath("$.STAGE[12].attrs.progress").value("done"))
                // 0~4유형 + 개방불가 + 보류 + 조사표에서 온 2개(유형 확인 필요, 제4유형)
                .andExpect(jsonPath("$.KOGL_TYPE.length()").value(9))
                .andExpect(jsonPath("$.CONTACT_CATEGORY[0].code").value("APPLICANT"))
                .andExpect(jsonPath("$.CONTACT_CATEGORY[0].label").value("신청기관"));
    }

    @Test
    void 인증이_없으면_401이다() throws Exception {
        mvc.perform(get("/api/meta/codes"))
                .andExpect(status().isUnauthorized());
    }
}
