Skip to content

Instantly share code, notes, and snippets.

View truongluu's full-sized avatar
🏠
Working from home

Lưu Xuân Trường truongluu

🏠
Working from home
View GitHub Profile
@truongluu
truongluu / memory-router-testing.ts
Created November 2, 2024 06:27
Memory Router Testing
// src/test/test-utils.tsx
import { render } from '@testing-library/react'
import { MemoryRouter, Routes, Route } from 'react-router-dom'
// Enhanced render utility that accepts route configuration
interface RenderWithRouterOptions {
route?: string
initialEntries?: string[]
initialIndex?: number
}
@truongluu
truongluu / mock-csv.test.ts
Last active September 23, 2024 13:55
Mock CSV file in Vitest
import { vi, describe, test, expect } from 'vitest';
// Mock CSV content
const mockCSVContent = `id,name,age
1,John Doe,30
2,Jane Smith,25
3,Bob Johnson,45`;
describe('CSV File Object Creation', () => {
test('creates a File object with CSV content', () => {
@truongluu
truongluu / usePostsStore.test.ts
Created July 24, 2024 09:45 — forked from mustafadalga/usePostsStore.test.ts
Writing unit tests of zustand state management store with vitest and testing-library
import { act, renderHook } from '@testing-library/react';
import { describe, it, expect, beforeEach } from "vitest";
import { usePostsStore } from "@/_store/usePostsStore";
describe('usePostsStore', () => {
beforeEach(() => {
usePostsStore.getState().reset()
});
it('should return the initial state', () => {
@truongluu
truongluu / App.test.ts
Created July 23, 2024 02:31 — forked from mustafadalga/App.test.ts
Mocking localstorage in vitest
import { createStore, Store } from 'vuex';
import { afterAll, beforeAll, describe, expect, it } from "vitest";
import { key, store } from "@/store";
import type { User } from "@/types/types";
import App from "@/App.vue";
import { DOMWrapper, mount, VueWrapper } from "@vue/test-utils";
import type { State } from "@/store"
const localStorageMock: Storage = (() => {
let store: Record<string, string> = {};
@truongluu
truongluu / docker-compose.yml
Created May 15, 2024 15:27 — forked from drdogbot7/docker-compose.yml
Wordpress Docker Compose with CLI - official images
version: '2'
services:
db:
image: mysql:5.7
volumes:
- "./.data/db:/var/lib/mysql"
ports:
- "[YOUR_DESIRED_SQL_PORT]:3306"
environment:
MYSQL_ROOT_PASSWORD: wordpress
@truongluu
truongluu / cachedFetch.js
Created December 18, 2023 09:14 — forked from mritzco/cachedFetch.js
Javascript caching fetch data
// From https://www.sitepoint.com/cache-fetched-ajax-requests/
// All credits to: Peter Bengtsson
// Added Content-type to headers so it can go to traditional validation like fetch does
// Add some debugging messages: activate with { verbose: true }
// Add a request to be able to add headers instead of just calling URL
const CachedFetch = (url, options) => {
let expiry = options.seconds || 5 * 60 // 5 min default
let logger = (options.verbose) ? console.log : function(){};
@truongluu
truongluu / wc-sortable-custom-taxonomy.php
Created November 22, 2023 11:48 — forked from RadGH/wc-sortable-custom-taxonomy.php
Woocommerce - Sortable custom taxonomy
<?php
// This is so easy, it's embarassing that I took 20 minutes to find it.
// "Catalog" is a custom taxonomy.
function make_catalog_sortable( $sortables ) {
$sortables[] = 'catalog';
return $sortables;
}
add_filter( 'woocommerce_sortable_taxonomies', 'make_catalog_sortable' );
@truongluu
truongluu / create_order.php
Created November 11, 2023 08:54 — forked from shitpoet/create_order.php
Programmatically create order, add (variative) products from cart to it, change status to `processing` and empty cart. Wordpress, WooCommerce 2.4.
$address = array(
'first_name' => $customer_name,
'last_name' => '',
'company' => '',
'email' => $customer_email,
'phone' => $customer_phone,
'address_1' => '',
'address_2' => '',
'city' => '',
'state' => '',
@truongluu
truongluu / SubmitFormHandler.tsx
Last active April 15, 2023 12:18
How to type a React Form with submit handler
import React from 'react';
export type GenHTMLFormControlsCollection<T> = HTMLFormControlsCollection & {
[inputName in keyof T]: HTMLInputElement;
};
interface GenericFormElement<T extends { [inputName: string]: HTMLInputElement }>
extends HTMLFormElement {
readonly elements: GenHTMLFormControlsCollection<T>;
}
@truongluu
truongluu / package.json
Created December 9, 2022 08:46
Gulp WP Theme - Package
{
"name": "wpsitename",
"version": "1.0.0",
"description": "",
"author": "jacekolczak",
"private": true,
"devDependencies": {
"gulp": "latest",
"gulp-livereload": "latest",
"gulp-sass": "latest",