JavaRush /จาวาบล็อก /Random-TH /เรากำลังเพิ่มความสามารถในการสมัครรับข้อมูลกลุ่มบทความ (ตอ...
Roman Beekeeper
ระดับ

เรากำลังเพิ่มความสามารถในการสมัครรับข้อมูลกลุ่มบทความ (ตอนที่ 1) - "โครงการ Java จาก A ถึง Z"

เผยแพร่ในกลุ่ม
สวัสดี! วันนี้เราจะเพิ่มการสมัครรับข้อมูลกลุ่มบทความใน JavaRush สิ่งนี้สอดคล้องกับปัญหา JRTB-5บน GitHub ให้ฉันอธิบาย: JavaRush มีส่วนที่เรียกว่า Articlesและในนั้นก็มีกลุ่มของบทความ แนวคิดคือการรับการแจ้งเตือนเกี่ยวกับบทความใหม่จากกลุ่มหนึ่งหรือหลายกลุ่มผ่านทางบอตโทรเลข“โครงการ Java จาก A ถึง Z”: การเพิ่มความสามารถในการสมัครรับกลุ่มบทความ  ตอนที่ 1 - 1

เพิ่ม JRTB-5

สมมติว่าฉันสนใจบทความจากกลุ่มSuccess Stories ดังนั้นฉันจึงต้องการสมัครรับข้อมูลอัปเดตจากกลุ่มนี้และรับลิงก์ไปยังสิ่งพิมพ์ใหม่ทุกครั้ง ในส่วนหนึ่งของงานนี้ เราต้องเรียนรู้วิธีใช้ API แบบเปิดสำหรับการทำงานกับกลุ่มใน JavaRush ทันใดนั้นสิ่งนี้ก็มาถึง นี่คือลิงค์ไปยังคำอธิบายของ open API
เพื่อน! คุณต้องการทราบทันทีเมื่อมีการเผยแพร่โค้ดใหม่สำหรับโครงการหรือบทความใหม่หรือไม่? เข้าร่วมช่อง tg ของ ฉัน ที่นั่นฉันรวบรวมบทความ ความคิด และการพัฒนาโอเพ่นซอร์สไว้ด้วยกัน

กร่างคืออะไร? ลองคิดดูตอนนี้

เรายังไม่ได้พูดถึงผยองเลย สำหรับผู้ที่ไม่ทราบ ฉันจะอธิบายสั้นๆ: นี่คือสถานที่ที่คุณสามารถดู API ของเซิร์ฟเวอร์อย่างเปิดเผย และพยายามส่งคำขอบางอย่างไปยังมัน โดยทั่วไปแล้ว กลุ่มคำขอที่เป็นไปได้แบบผยองจะจัดกลุ่ม ในกรณีของเรา มีสามกลุ่ม: ฟอรัม-คำถาม , กลุ่ม , โพสต์ ในแต่ละกลุ่มจะมีคำขอหนึ่งรายการขึ้นไปที่ระบุข้อมูลที่จำเป็นทั้งหมดในการสร้างคำขอนี้ (นั่นคือ พารามิเตอร์เพิ่มเติมใดที่สามารถส่งผ่านได้ จะทำอย่างไรกับพารามิเตอร์เหล่านี้ วิธี http ใด เป็นต้น) ฉันแนะนำให้คุณอ่านและดูเพิ่มเติมในหัวข้อนี้ เพราะนี่คือส่วนหนึ่งของการพัฒนาที่เกือบทุกคนจะต้องเจอ เพื่อทำความเข้าใจ มาดูกันว่ามีกี่กลุ่มใน JavaRush เมื่อต้องการทำเช่นนี้ ให้ ขยายกลุ่มตัวควบคุมกลุ่ม และเลือกรับคำขอ/api/1.0/rest/groups/count มันจะส่งคืนจำนวนกลุ่มใน JavaRush ให้เรา มาดูกัน: “โครงการ Java จาก A ถึง Z”: การเพิ่มความสามารถในการสมัครรับกลุ่มบทความ  ส่วนที่ 1 - 2รูปภาพแสดงว่าแบบสอบถามนี้รองรับพารามิเตอร์หลายตัว (แบบสอบถาม ประเภท ตัวกรอง) หากต้องการลองใช้คำขอนี้ คุณจะต้องค้นหา ปุ่ม ลองใช้หลังจากนั้นพารามิเตอร์เหล่านี้จึงสามารถกำหนดค่าได้: “โครงการ Java จาก A ถึง Z”: การเพิ่มความสามารถในการสมัครรับกลุ่มบทความ  ส่วนที่ 1 - 3คุณยังสามารถกำหนดค่าประเภท ตัวกรอง และข้อความค้นหาได้จากที่นั่น (ซึ่งน่าสนใจจริงๆ ที่นี่: นี่จะเป็นการค้นหาข้อความใน กลุ่ม). แต่สำหรับตอนนี้ มารันโดยไม่มีข้อจำกัดใดๆ และดูว่ามีกี่กลุ่มใน JavaRush โดยคลิกที่ดำเนินการ ด้านล่างจะมีการตอบกลับ (ในส่วนการตอบกลับของเซิร์ฟเวอร์) ต่อคำขอนี้: “โครงการ Java จาก A ถึง Z”: การเพิ่มความสามารถในการสมัครรับกลุ่มบทความ  ส่วนที่ 1 - 4เราเห็นว่ามี ทั้งหมด 30 กลุ่ม คำขอนี้เสร็จสมบูรณ์ใน 95ms และมีชุดของส่วนหัวบางส่วนในการตอบกลับ ต่อไป เรามาลองกำหนดค่าพารามิเตอร์บางตัวกัน เรามาเลือกพารามิเตอร์ประเภทเท่ากับค่า COMPANY แล้วดูว่าผลลัพธ์เปลี่ยนแปลงไปอย่างไร“โครงการ Java จาก A ถึง Z”: การเพิ่มความสามารถในการสมัครรับกลุ่มบทความ  ส่วนที่ 1 - 5มี 4 รายการ จะตรวจสอบได้อย่างไร ง่ายมาก: คุณสามารถไปที่เว็บไซต์ ค้นหาหัวข้อบทความ เลือกกลุ่มทั้งหมดและเพิ่มตัวกรองที่เหมาะสมที่นั่น ( https://javarush.com/groups/all?type=COMPANY ) ใช่ครับ มีแค่ 4 อันเท่านั้น จริงๆ แล้วมี 3 อัน :D “โครงการ Java จาก A ถึง Z”: การเพิ่มความสามารถในการสมัครรับกลุ่มบทความ  ส่วนที่ 1 - 6จนถึงตอนนี้ก็ยังพอเหมาะพอดี ว่าแต่ถ้าเราตรวจสอบมหาวิทยาลัยก็ยังไม่มีเลย เพื่อความสนุก ดูว่าเกิดอะไรขึ้นหากคุณตั้งค่า filter = MY ในเบราว์เซอร์ที่คุณเข้าสู่ระบบ Javarush และไม่ได้เข้าสู่ระบบ ข้อมูลเพิ่มเติมเกี่ยวกับผยอง - ในบทความเกี่ยวกับHabréนี้

การเขียนไคลเอ็นต์สำหรับ Javarush API สำหรับกลุ่ม

ในตอนนี้ เราจะเขียนไคลเอ็นต์ Java ที่ใช้ API แบบเปิดซึ่งสามารถส่งคำขอ รับการตอบกลับ และรู้ได้อย่างชัดเจนว่าอ็อบเจ็กต์ใดจะมาถึง นอกจากนี้เรายังจะนำวัตถุจากผยองจาก ส่วน แบบจำลอง (ที่ด้านล่างสุดของหน้า) มาสร้างแพ็คเกจใหม่และเรียกมันว่า javarushclient ถัดจาก service, repository ในอนาคต เราจะย้ายสิ่งนี้ไปยังไลบรารีแยกต่างหากภายในองค์กรชุมชน Javarush และจะใช้มันเป็นการพึ่งพาเท่านั้น
ฉันได้เขียนเกี่ยวกับการสร้างไคลเอนต์ Java ในบทความ“คำแนะนำในการสร้างไคลเอนต์สำหรับ Skyscanner API และการเผยแพร่ใน jCenter และ Maven Central”
ก่อนอื่น คุณต้องเพิ่ม Unitrest ซึ่งเป็นไลบรารีสำหรับสร้างคำขอ http ไปยัง JavaRush API:
<dependency>
  <groupId>com.konghq</groupId>
  <artifactId>unirest-java</artifactId>
  <version>${unirest.version}</version>
</dependency>
และใส่เวอร์ชันลงในบล็อกคุณสมบัติ:
<unirest.version>3.11.01</unirest.version>
เมื่อเราได้รับการพึ่งพาแล้ว เราก็สามารถเริ่มเพิ่มโค้ดได้ มาสร้างไคลเอนต์สำหรับกลุ่ม JavaRushGroupClient และการนำไปใช้ในคลาส JavaRushGroupClientImpl แต่ก่อนอื่นคุณต้องสร้าง DTO (วัตถุการถ่ายโอนข้อมูล) นั่นคือคลาสที่วัตถุจะนำข้อมูลทั้งหมดที่จำเป็นสำหรับไคลเอนต์ คุณสามารถดูโมเดลทั้งหมดได้ในผยอง ที่ด้านล่างสุด มีส่วนโมเดลซึ่งคุณสามารถนับได้ นี่คือ ลักษณะของ GroupDiscussionInfoในผยอง: ในแพ็คเกจ javarushclient เราจะสร้าง “โครงการ Java จาก A ถึง Z”: การเพิ่มความสามารถในการสมัครรับกลุ่มบทความ  ตอนที่ 1 - 7แพ็คเกจdtoซึ่งเราจะเพิ่มคลาสต่อไปนี้ตามข้อมูลจากผยอง:
  • MeGroupInfoStatus :

    package com.github.javarushcommunity.jrtb.javarushclient.dto;
    
    /**
    * Member group status.
    */
    public enum MeGroupInfoStatus {
       UNKNOWN, CANDIDATE, INVITEE, MEMBER, EDITOR, MODERATOR, ADMINISTRATOR, BANNED
    }

  • ข้อมูลกลุ่มฉัน :

    package com.github.javarushcommunity.jrtb.javarushclient.dto;
    
    import lombok.Data;
    
    /**
    * Group information related to authorized user. If there is no user - will be null.
    */
    @Data
    public class MeGroupInfo {
       private MeGroupInfoStatus status;
       private Integer userGroupId;
    }

  • ประเภทข้อมูลกลุ่ม :

    package com.github.javarushcommunity.jrtb.javarushclient.dto;
    
    /**
    * Group Info type;
    */
    public enum GroupInfoType {
       UNKNOWN, CITY, COMPANY, COLLEGE, TECH, SPECIAL, COUNTRY
    }

  • ข้อมูลการสนทนาของผู้ใช้ :

    package com.github.javarushcommunity.jrtb.javarushclient.dto;
    
    import lombok.Data;
    
    /**
    * DTO for User discussion info.
    */
    @Data
    public class UserDiscussionInfo {
    
       private Boolean isBookmarked;
       private Integer lastTime;
       private Integer newCommentsCount;
    }

  • การมองเห็นกลุ่ม :

    package com.github.javarushcommunity.jrtb.javarushclient.dto;
    
    /**
    * Group Visibility status.
    */
    public enum GroupVisibilityStatus {
       UNKNOWN, RESTRICTED, PUBLIC, PROTECTED, PRIVATE, DISABLED, DELETED
    }

  • จากนั้น - GroupInfo :

    package com.github.javarushcommunity.jrtb.javarushclient.dto;
    
    import lombok.Data;
    import lombok.ToString;
    
    /**
    * Group Info DTO class.
    */
    @Data
    @ToString
    public class GroupInfo {
    
       private Integer id;
       private String avatarUrl;
       private String createTime;
       private String description;
       private String key;
       private Integer levelToEditor;
       private MeGroupInfo meGroupInfo;
       private String pictureUrl;
       private String title;
       private GroupInfoType type;
       private Integer userCount;
       private GroupVisibilityStatus visibilityStatus;
    }

เนื่องจากGroupInfoและGroupDiscussionInfoเกือบจะเหมือนกันทั้งหมด ดังนั้นมาเชื่อมโยงพวกมันในการสืบทอด - GroupDiscusionInfo :
package com.github.javarushcommunity.jrtb.javarushclient.dto;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;

/**
* Group discussion info class.
*/
@EqualsAndHashCode(callSuper = true)
@Data
@ToString(callSuper = true)
public class GroupDiscussionInfo extends GroupInfo {

   private UserDiscussionInfo userDiscussionInfo;
   private Integer commentsCount;
}
เรายังจำเป็นต้องมีตัวกรองสำหรับ คำขอ GroupFilter :
package com.github.javarushcommunity.jrtb.javarushclient.dto;

/**
* Filters for group requests.
*/
public enum GroupFilter {

   UNKNOWN, MY, ALL
}
ในคำขอรับด้วย ID จะส่งกลับ GroupDiscussionInfo และในคำขอสำหรับคอลเลกชันของกลุ่ม คุณสามารถรับทั้ง GroupInfo และ GroupDiscussionInfo เนื่องจากคำขอสามารถมีประเภท การสืบค้น ตัวกรอง ออฟเซ็ต และขีดจำกัด เรามาสร้าง คลาส GroupRequestArgs แยกต่างหาก และทำให้เป็นคลาสตัวสร้าง (อ่านว่ารูปแบบตัวสร้างคืออะไร):
package com.github.javarushcommunity.jrtb.javarushclient.dto;

import lombok.*;

import java.util.HashMap;
import java.util.Map;

import static java.util.Objects.nonNull;

/**
* Request arguments for group requests.
*/
@Builder
@Getter
public class GroupRequestArgs {

   private final String query;
   private final GroupInfoType type;
   private final GroupFilter filter;

   /**
    * specified where to start getting groups
    */
   private final Integer offset;
   /**
    * Limited number of groups.
    */
   private final Integer limit;

   public Map populateQueries() {
       Map queries = new HashMap<>();
       if(nonNull(query)) {
           queries.put("query", query);
       }
       if(nonNull(type)) {
           queries.put("type", type);
       }
       if(nonNull(filter)) {
           queries.put("filter", filter);
       }
       if(nonNull(offset)) {
           queries.put("offset", offset);
       }
       if(nonNull(limit)) {
           queries.put("limit", limit);
       }
       return queries;
   }
}
ในการค้นหาจำนวนกลุ่มจะแตกต่างกันเล็กน้อย มีเพียงข้อความค้นหา ประเภท และตัวกรองเท่านั้น และดูเหมือนว่าคุณไม่ต้องการทำซ้ำโค้ด ในเวลาเดียวกันหากคุณเริ่มรวมเข้าด้วยกัน มันจะดูน่าเกลียดเมื่อทำงานกับผู้สร้าง ดังนั้นฉันจึงตัดสินใจแยกพวกมันออกและทำซ้ำโค้ด นี่คือ ลักษณะของ GroupCountRequestArgs :
package com.github.javarushcommunity.jrtb.javarushclient.dto;

import lombok.Builder;
import lombok.Getter;

import java.util.HashMap;
import java.util.Map;

import static java.util.Objects.nonNull;

/**
* Request arguments for group count requests.
*/
@Builder
@Getter
public class GroupsCountRequestArgs {
   private final String query;
   private final GroupInfoType type;
   private final GroupFilter filter;

   public Map populateQueries() {
       Map queries = new HashMap<>();
       if (nonNull(query)) {
           queries.put("query", query);
       }
       if (nonNull(type)) {
           queries.put("type", type);
       }
       if (nonNull(filter)) {
           queries.put("filter", filter);
       }
       return queries;
   }
}
ใช่ ฉันไม่ได้พูดถึงว่าสองคลาสสุดท้ายมีเมธอด populateQueries ซึ่งจะเตรียมแผนที่สำหรับการสร้างแบบสอบถาม (คุณจะเห็นในภายหลัง) จากคลาสที่อธิบายไว้ข้างต้น มาสร้างอินเทอร์เฟซสำหรับJavaRushGroupClient กัน :
package com.github.javarushcommunity.jrtb.javarushclient;

import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupDiscussionInfo;
import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupInfo;
import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupRequestArgs;
import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupsCountRequestArgs;

import java.util.List;

/**
 * Client for Javarush Open API corresponds to Groups.
 */
public interface JavaRushGroupClient {

    /**
     * Get all the {@link GroupInfo} filtered by provided {@link GroupRequestArgs}.
     *
     * @param requestArgs provided {@link GroupRequestArgs}.
     * @return the collection of the {@link GroupInfo} objects.
     */
    List<GroupInfo> getGroupList(GroupRequestArgs requestArgs);

    /**
     * Get all the {@link GroupDiscussionInfo} filtered by provided {@link GroupRequestArgs}.
     *
     * @param requestArgs provided {@link GroupRequestArgs}
     * @return the collection of the {@link GroupDiscussionInfo} objects.
     */
    List<GroupDiscussionInfo> getGroupDiscussionList(GroupRequestArgs requestArgs);

    /**
     * Get count of groups filtered by provided {@link GroupRequestArgs}.
     *
     * @param countRequestArgs provided {@link GroupsCountRequestArgs}.
     * @return the count of the groups.
     */
    Integer getGroupCount(GroupsCountRequestArgs countRequestArgs);

    /**
     * Get {@link GroupDiscussionInfo} by provided ID.
     *
     * @param id provided ID.
     * @return {@link GroupDiscussionInfo} object.
     */
    GroupDiscussionInfo getGroupById(Integer id);
}
คำขอที่แตกต่างกันสองรายการสำหรับกรณีที่เราต้องการรับข้อมูล GroupInfo หรือ GroupDiscussionInfo ที่เพิ่ม มิฉะนั้น การสืบค้นเหล่านี้จะเหมือนกัน และข้อแตกต่างเพียงอย่างเดียวคือในแฟล็ก includeDiscussion หนึ่งรายการจะเป็นจริง และอีกรายการหนึ่งจะเป็นเท็จ ดังนั้นจึงมี 4 วิธี ไม่ใช่ 3 วิธี ตอนนี้เรามาเริ่มดำเนินการ:
package com.github.javarushcommunity.jrtb.javarushclient;

import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupDiscussionInfo;
import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupInfo;
import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupRequestArgs;
import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupsCountRequestArgs;
import kong.unirest.GenericType;
import kong.unirest.Unirest;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.List;

/**
* Implementation of the {@link JavaRushGroupClient} interface.
*/
@Component
public class JavaRushGroupClientImpl implements JavaRushGroupClient {

   private final String javarushApiGroupPath;

   public JavaRushGroupClientImpl(@Value("${javarush.api.path}") String javarushApi) {
       this.javarushApiGroupPath = javarushApi + "/groups";
   }

   @Override
   public List<GroupInfo> getGroupList(GroupRequestArgs requestArgs) {
       return Unirest.get(javarushApiGroupPath)
               .queryString(requestArgs.populateQueries())
               .asObject(new GenericType<list<GroupInfo>>() {
               })
               .getBody();
   }

   @Override
   public List<GroupDiscussionInfo> getGroupDiscussionList(GroupRequestArgs requestArgs) {
       return Unirest.get(javarushApiGroupPath)
               .queryString(requestArgs.populateQueries())
               .asObject(new GenericType<list<GroupDiscussionInfo>>() {
               })
               .getBody();
   }

   @Override
   public Integer getGroupCount(GroupsCountRequestArgs countRequestArgs) {
       return Integer.valueOf(
               Unirest.get(String.format("%s/count", javarushApiGroupPath))
                       .queryString(countRequestArgs.populateQueries())
                       .asString()
                       .getBody()
       );
   }

   @Override
   public GroupDiscussionInfo getGroupById(Integer id) {
       return Unirest.get(String.format("%s/group%s", javarushApiGroupPath, id.toString()))
               .asObject(GroupDiscussionInfo.class)
               .getBody();
   }


}
ฉันเพิ่มเส้นทางไปยัง API ในตัวสร้างโดยใช้คำอธิบายประกอบค่าที่คุ้นเคยอยู่แล้ว โดยบอกเป็นนัยว่าค่าภายในคำอธิบายประกอบสอดคล้องกับฟิลด์ในไฟล์คุณสมบัติ ดังนั้นเรามาเพิ่มบรรทัดใหม่ให้กับ application.properties:
javarush.api.path=https://javarush.com/api/1.0/rest
ตอนนี้ค่านี้จะอยู่ในที่เดียวสำหรับไคลเอ็นต์ API ทั้งหมด และหากเส้นทาง API เปลี่ยนแปลง เราจะอัปเดตอย่างรวดเร็ว ก่อนหน้านี้ ฉันตอกตะปูด้วยกล้องจุลทรรศน์ได้รับการตอบกลับจากคำขอ http ผ่าน Unirest แล้วแปลเป็นสตริง จากนั้นแยกวิเคราะห์สตริงนี้ผ่าน Jackson... มันน่ากลัว น่าเบื่อ และต้องการสิ่งเพิ่มเติมมากมาย ในห้องสมุด นี้ คุณสามารถดูได้ว่ามีลักษณะอย่างไร ทันทีที่ฉันได้ลงมือทำ ฉันจะปรับโครงสร้างทุกอย่างใหม่
ใครก็ตามที่ต้องการลองอัปเดตไลบรารีนี้ - เพิ่มออบเจ็กต์การรับโดยใช้เครื่องมือของไลบรารี unirest เท่านั้น - เขียนในข้อความส่วนตัวหรือเป็นปัญหาใหม่ในไลบรารี นี่จะเป็นประสบการณ์การทำงานที่แท้จริงสำหรับคุณ แต่ฉันไม่รังเกียจ ฉันจะดำเนินการตรวจสอบโค้ดฉบับเต็มและช่วยเหลือหากจำเป็น
ตอนนี้คำถามคือ: รหัสของเราทำงานตามที่เราคาดหวังหรือไม่? คำตอบนั้นง่าย: คุณเพียงแค่ต้องเขียนแบบทดสอบให้พวกเขา ดังที่ผมได้กล่าวไปหลายครั้งแล้ว นักพัฒนาซอฟต์แวร์จะต้องสามารถเขียนการทดสอบได้ ดังนั้น เมื่อใช้ Swagger UI ของเรา เราจะส่งคำขอ ดูการตอบกลับ และแทนที่ลงในการทดสอบตามผลลัพธ์ที่คาดหวัง คุณอาจสังเกตได้ทันทีว่าจำนวนกลุ่มไม่คงที่และสามารถเปลี่ยนแปลงได้ และคุณพูดถูก คำถามเดียวคือตัวเลขนี้เปลี่ยนแปลงบ่อยแค่ไหน? น้อยมาก ดังนั้นในช่วงหลายเดือนมานี้เราสามารถพูดได้ว่าค่านี้จะคงที่ และหากมีอะไรเปลี่ยนแปลงเราจะอัปเดตการทดสอบ พบกับ - JavaRushGroupClientTest:
package com.github.javarushcommunity.jrtb.javarushclient;

import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupDiscussionInfo;
import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupInfo;
import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupRequestArgs;
import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupsCountRequestArgs;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import java.util.List;

import static com.github.javarushcommunity.jrtb.javarushclient.dto.GroupInfoType.TECH;

@DisplayName("Integration-level testing for JavaRushGroupClientImplTest")
class JavaRushGroupClientTest {

   private final JavaRushGroupClient groupClient = new JavaRushGroupClientImpl("https://javarush.com/api/1.0/rest");

   @Test
   public void shouldProperlyGetGroupsWithEmptyArgs() {
       //given
       GroupRequestArgs args = GroupRequestArgs.builder().build();

       //when
       List<GroupInfo> groupList = groupClient.getGroupList(args);

       //then
       Assertions.assertNotNull(groupList);
       Assertions.assertFalse(groupList.isEmpty());
   }

   @Test
   public void shouldProperlyGetWithOffSetAndLimit() {
       //given
       GroupRequestArgs args = GroupRequestArgs.builder()
               .offset(1)
               .limit(3)
               .build();

       //when
       List<GroupInfo> groupList = groupClient.getGroupList(args);

       //then
       Assertions.assertNotNull(groupList);
       Assertions.assertEquals(3, groupList.size());
   }

   @Test
   public void shouldProperlyGetGroupsDiscWithEmptyArgs() {
       //given
       GroupRequestArgs args = GroupRequestArgs.builder().build();

       //when
       List<GroupDiscussionInfo> groupList = groupClient.getGroupDiscussionList(args);

       //then
       Assertions.assertNotNull(groupList);
       Assertions.assertFalse(groupList.isEmpty());
   }

   @Test
   public void shouldProperlyGetGroupDiscWithOffSetAndLimit() {
       //given
       GroupRequestArgs args = GroupRequestArgs.builder()
               .offset(1)
               .limit(3)
               .build();

       //when
       List<GroupDiscussionInfo> groupList = groupClient.getGroupDiscussionList(args);

       //then
       Assertions.assertNotNull(groupList);
       Assertions.assertEquals(3, groupList.size());
   }

   @Test
   public void shouldProperlyGetGroupCount() {
       //given
       GroupsCountRequestArgs args = GroupsCountRequestArgs.builder().build();

       //when
       Integer groupCount = groupClient.getGroupCount(args);

       //then
       Assertions.assertEquals(30, groupCount);
   }

   @Test
   public void shouldProperlyGetGroupTECHCount() {
       //given
       GroupsCountRequestArgs args = GroupsCountRequestArgs.builder()
               .type(TECH)
               .build();

       //when
       Integer groupCount = groupClient.getGroupCount(args);

       //then
       Assertions.assertEquals(7, groupCount);
   }

   @Test
   public void shouldProperlyGetGroupById() {
       //given
       Integer androidGroupId = 16;

       //when
       GroupDiscussionInfo groupById = groupClient.getGroupById(androidGroupId);

       //then
       Assertions.assertNotNull(groupById);
       Assertions.assertEquals(16, groupById.getId());
       Assertions.assertEquals(TECH, groupById.getType());
       Assertions.assertEquals("android", groupById.getKey());
   }
}
การทดสอบจะเขียนในลักษณะเดียวกับเมื่อก่อน มีการทดสอบหลายครั้งสำหรับแต่ละคำขอ ไม่มีประโยชน์ที่จะทดสอบทุกอย่าง เนื่องจากฉันคิดว่า API นี้ได้รับการทดสอบในวิธีที่ดีที่สุดแล้ว

บทสรุป

ในส่วนหนึ่งของบทความนี้ เราได้เพิ่มไคลเอ็นต์ Java สำหรับกลุ่มลงใน JavaRush API อย่างที่พวกเขาพูด จงใช้ชีวิตและเรียนรู้ ในขณะที่ฉันกำลังเขียนไคลเอนต์รายนี้ ฉันใช้ประโยชน์จากเอกสารของพวกเขาและใช้งานกับออบเจ็กต์ที่พวกเขาให้มาได้อย่างสะดวก ฉันดึงความสนใจของคุณไปที่งานที่ฉันเสนอ ถ้าใครสนใจก็ส่งข้อความส่วนตัวมาหาผมได้เลย รับรองว่าจะเป็นประสบการณ์ที่น่าสนใจมาก นี่เป็นส่วนแรก ในส่วนที่สอง เราจะใช้คำสั่งเพิ่มโดยตรง และ (หากเราใส่ลงในบทความเดียว) เราจะเพิ่มการรับรายชื่อกลุ่มที่ผู้ใช้สมัครสมาชิก ต่อไป ใครก็ตามที่มีความปรารถนาและความสามารถในการเขียนข้อความให้กับบอท โปรดเขียนถึงฉันทาง PM ฉันไม่ใช่ผู้เชี่ยวชาญในเรื่องนี้ และความช่วยเหลือใดๆ จะเป็นประโยชน์มาก มาทำให้ทั้งหมดนี้เป็นทางการเป็นการพัฒนาโอเพ่นซอร์สมันจะน่าสนใจ! ตามปกติ - กดไลค์ สมัครสมาชิก กระดิ่งให้ ดาว โครงการของเราเขียนความคิดเห็นและให้คะแนนบทความ!
ลิงค์ที่เป็นประโยชน์

รายการเนื้อหาทั้งหมดในซีรีส์นี้อยู่ที่ตอนต้นของบทความนี้

ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION